awkでgsubを使用して単語を括弧で置き換える

こんにちは、gsubを使用して括弧で囲まれた単語を置き換えるにはどうすればよいですか。

こちら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 

次に、printを引数なしで使用する(print $0と同じ)か、または印刷の1省略形(1;<など、trueと評価される式のデフォルトのawkアクション/ div>は現在の行を出力します):

$ 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 

回答

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

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

そして与えるもの:

ABC/G 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です