私awk
はテキスト/文字列の置換を次sub()
のgsub()
ように行うことができることを知っています:
kent$ echo "fffff"|awk '{gsub("f", "b")}1'
bbbbb
また
kent$ echo "fffff"|awk '{gsub(/f/, "b")}1'
bbbbb
しかし、今日私はタイプミスを犯しました、私は次のように行を書きました:
kent$ echo "fffff"|awk '{gsub('f', "b")}1'
しかしawk
、それについて文句を言うことはありませんでしたが、通常どおり出力を生成しました。もちろん、予期しない出力でした。エラーを見つけるのに時間がかかりました。awk
私に与えられた出力は次のとおりです。
bfbfbfbfbfb
もう一つの例:
kent$ echo "fafafafafXX"|awk '{gsub('fa', "B")}1'
BfBaBfBaBfBaBfBaBfBXBXB
の例sub()
も奇妙です:
kent$ echo "thanks in advance"|awk '{sub('a', "B")}1'
Bthanks in advance
誰かが奇妙な置換がどのように行われたかを私に説明できますか?
kent$ awk --version
GNU Awk 4.0.2
編集
ジョニからの回答ありがとうございます。多分この例はそれをよりよく説明します、私はそれをここに追加するだけです:
kent$ echo "thanks in advance"|awk '{f="k";sub('f', "B")}1'
thanBs in advance
kent$ echo "thanks in advance"|awk '{sub('th ank', "B")}1'
awk: cmd. line:2: {sub(th
awk: cmd. line:2: ^ unexpected newline or end of string