ホーム > テキスト処理・検索 > awk-gsub

awk-gsub: グローバル文字列置換

awkコマンド内で使用される`gsub`関数は、特定の正規表現に一致するすべての文字列を別の文字列にグローバルに置換するために使用されます。ファイルの内容やストリームで複数回出現するパターンを一括で変更する場合に非常に便利です。

概要

`gsub`はGlobal Substitutionの略で、`awk`スクリプト内で特定の正規表現に一致するすべての部分を指定された文字列に変更する関数です。`sub`関数が最初の一致項目のみを変更するのに対し、`gsub`はすべての一致項目を変更します。

gsub関数の構文

gsub(正規表現, 置換文字列, [対象文字列])

  • 正規表現 (regex): 検索するパターンを定義する正規表現です。
  • 置換文字列 (replacement): 見つかったパターンを置き換える文字列です。
  • 対象文字列 (target_string): 置換操作を実行する文字列です。省略すると、現在のレコード全体($0)に適用されます。

戻り値

`gsub`関数は、置換が発生した回数を整数で返します。この戻り値は、条件分岐などで便利に使用できます。

使用例

`gsub`関数を活用した様々な文字列置換の例です。

ファイル内のすべての'old'を'new'に置換

echo 'This is an old file with old data.' > data.txt
awk '{gsub(/old/, "new"); print}' data.txt

data.txtファイル内の'old'という単語が出現するすべての箇所を'new'に変更します。変更された内容を出力します。

空白をハイフンに置換

echo 'Hello World from Awk' | awk '{gsub(/ /, "-"); print}'

入力された文字列のすべての空白をハイフン(-)に変更します。

特定のフィールド内でのみ置換

echo 'field1 field2 apple' | awk '{gsub(/a/, "X", $3); print}'

3番目のフィールド($3)内でのみ'a'を'X'に置換します。(例: 'apple banana cat' -> 'apple banana cXt')

大文字・小文字を区別せずに置換

echo 'Apple is an apple.' | awk 'BEGIN {IGNORECASE=1} {gsub(/apple/, "orange"); print}'

`IGNORECASE`変数を1に設定し、大文字・小文字を区別せずに'apple'を'orange'に置換します。

数字のみ削除

echo 'Product ID: 12345 ABC' | awk '{gsub(/[0-9]/, ""); print}'

文字列からすべての数字を削除します。

ヒントと注意点

`gsub`関数を使用する際の役立つヒントと注意すべき点です。

sub関数との違い

`gsub`はすべての一致項目を置換するのに対し、`sub`関数は最初の一致項目のみを置換します。必要に応じて適切な関数を選択してください。

  • `gsub(regex, replacement, target)`: すべての一致項目を置換
  • `sub(regex, replacement, target)`: 最初の一致項目のみ置換

正規表現の特殊文字

正規表現内で`.` `*` `+` `?` `[` `]` `(` `)` `|` `^` `$` `\` などの特殊文字をリテラルとして使用するには、`\`でエスケープする必要があります。例えば、実際のドット(.)を検索するには`\.`を使用します。

対象文字列省略時の注意

`target_string`を省略すると、デフォルトで現在のレコード全体($0)に置換処理が適用されます。特定のフィールドにのみ適用したい場合は、必ず`gsub(regex, replacement, $N)`の形式でフィールドを指定する必要があります。

置換文字列内のバックスラッシュ

置換文字列内のバックスラッシュ(`\`)は特別な意味を持つことがあります。例えば、`\&`は一致した全体文字列を表します。リテラルのバックスラッシュを使用するには、`\\`のように二重にエスケープする必要があります。


同じカテゴリのコマンド