スポンサーリンク

awkのsub()の使い方

※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-

※MACターミナル(BSD系)での動作確認です。
下記の形式で、sub()を使います。

sub(置換対象文字列, 置換後文字列, 入力文字列)

例えば、下記のin.txtがあったとします。
 $ cat in.txt 
line11 line12 line13
line21 line22 line23
line31 line32 line33

例えば、$0(1行全体)を、下記のようにsub()を使って、"line"を"after"に置換します。

参考:awkの$0,$1,$2,$3,変数で列の操作

 $ cat in.txt | awk '{sub("line", "after", $0);print $0}'
after11 line12 line13
after21 line22 line23
after31 line32 line33

スポンサーリンク

sub()の注意点

sub()の注意点は、置換対象文字列にマッチした最初の文字列しか置換されない点です。

参考:awkのgsub()とsub()の違いは置換回数の回数制約

先程の例では、sub()を使った場合、最初の"line"しか"after"に置換されませんでした。

gsub()を使うと、置換対象文字列があった場合は全て置換されます。

参考:awkの文字列置換関数gsub()の使い方

 $ cat in.txt | awk '{gsub("line", "after", $0);print $0}'
after11 after12 after13
after21 after22 after23
after31 after32 after33

sub()で正規表現を使って置換

sub()で正規表現を使って置換することもできます。

下記のように、最初にマッチした数字を"after"に置換しています。

 $ cat in.txt | awk '{sub(/[0-9]/, "after", $0);print $0}'
lineafter1 line12 line13
lineafter1 line22 line23
lineafter1 line32 line33

n回目に出現した文字列を置換

n回目に出現した文字列を置換する場合には、gensub()を使います。
下記の記事を書いていますので、よければ参考にしてください。

参考:awkのgensub()関数の使い方

入力文字列に対して、n番目に出現した置換対象文字列を置換文字列で置換します。

r = gensub( 置換対象文字列, 置換文字列, n, 入力文字列 )

スポンサーリンク