正規表現と置換文字列が与えられたら、awkを使用して次のことを達成するにはどうすればよいですか?
- 行に一致するものがない場合、何もしません。
- 1行に複数の一致が含まれている場合は、最後の一致を代替文字列
gsub()
に置き換えます。つまり、最後の一致は; - 行に一致が1つだけ含まれている場合は、一致を代替文字列に置き換えます。
ありがとうございます。
答え1
使用しないでgsub()
ください模様FSとOFSのフィールド区切り文字でOFSをそのままにして、最後の2つのフィールドを除くすべてのフィールドを印刷し、次に最後から2番目のフィールドを印刷します。「文字列の変更」その後、最後のフィールドが表示されます。
awk 'BEGIN{ FS=OFS="pat" }
NF>1{ for(i=1; i<NF-1; i++) printf "%s", $i OFS;
printf "%s\n", $i "REPLACEMENT-STRING" $NF; next
}1' infile
入力例:
pat 1 pat2 patt 3 pat 4
pat
patt pat
pa t
出力:
pat 1 pat2 patt 3 REPLACEMENT-STRING 4
REPLACEMENT-STRING
patt REPLACEMENT-STRING
pa t