web-dev-qa-db-ja.com

awkでgsubを使用して、Wordを括弧に置き換えます

こんにちは、gsubを使用して括弧のあるWordを置き換えるにはどうすればよいですか。

ここでABC(T)をABC/Gに置き換えたい

awk ' {gsub("ABC\(T\)","ABC/G")}; Print $0' "$FILENAME" > tmp.tmp && mv tmp.tmp "$FILENAME"

gsub//形式を使用すると、全体を単純化できます。

$ echo "ABC(T)" | awk '{gsub(/ABC\(T\)/,"ABC/G")}; print $0'
ABC/G

次に、引数なしでprintprint $0と同じ)または印刷用の1省略形(デフォルトのawkアクション)を使用して、さらに単純化できます。 1;など、trueと評価される式は、現在の行を出力します):

$ echo "ABC(T)" | awk '{gsub(/ABC\(T\)/,"ABC/G")}1'
ABC/G

ただし、個人的には、これにはawkを使用しません。構文は短く、他のツールではよりクリーンです。

$ echo "ABC(T)" | sed 's|ABC(T)|ABC/G|'
ABC/G

$ echo "ABC(T)" | Perl -pe 's|ABC\(T\)|ABC/G|'
ABC/G
4
terdon

あなたはとても近かった。必要なのは2つの\だけです。これは、セットの1つがBASHを通過するテキスト自体用であり、もう1つがawkによって解析されている実際の\であるためです。これは私にとってはうまくいくようです:

echo 'ABC(T)' | awk ' {gsub("ABC\\(T\\)","ABC/G")}; Print $0' "$FILENAME"

そして与える:

ABC/G
2
DKing