ブログ

正規表現の使い方5(sedによるファイル内文字列の加工)

at_takumi.mizutani
2022年8月15日 15時30分

ファイル内文字列の加工

文字列の一部を置き換え、削除といった加工を行うにはsedコマンドを使用します。

文字列の置き換え

sedコマンドで"s/置換元/置換後/g"と記述することで文字列の置き換えを行うことができます。

以下の例では、Armadillo.txtから"G3"とマッチする箇所を"Degu_G3"と置き換えます。

Armadillo.txt
Armadillo-IoT_G4
Armadillo-IoT_G3
Armadillo-IoT_G3L
Armadillo-IoT_A6
Armadillo-IoT_A6E
Armadillo-X1
Armadillo-640
Armadillo-610
Armadillo-460
Armadillo-440
Armadillo-420
Armadillo-410
Armadillo-840
Armadillo-810
[armadillo ~]# sed 's/.*G3$/Degu_G3/g' Armadillo.txt
Armadillo-IoT_G4
Degu_G3
Armadillo-IoT_G3L
Armadillo-IoT_A6
Armadillo-IoT_A6E
Armadillo-X1
Armadillo-640
Armadillo-610
Armadillo-460
Armadillo-440
Armadillo-420
Armadillo-410
Armadillo-840
Armadillo-810

しかし、このコマンドを実行しただけでは加工後の結果を出力するだけでファイル内のテキスト自体は置き換えられません。

実行結果をファイルに反映させるためにはiオプションを使用します。

[armadillo ~]# sed -i 's/.*G3$/Degu_G3/g' Armadillo.txt
[armadillo ~]# cat Armadillo.txt
Armadillo-IoT_G4
Degu_G3
Armadillo-IoT_G3L
Armadillo-IoT_A6
Armadillo-IoT_A6E
Armadillo-X1
Armadillo-640
Armadillo-610
Armadillo-460
Armadillo-440
Armadillo-420
Armadillo-410
Armadillo-840
Armadillo-810    

文字列の削除

sedコマンドで"s/正規表現//g"と記述することでマッチした文字列の削除を行うことができます。

以下の例では、Armadillo.txtから"○○IoT_"とマッチする箇所を削除します。

[armadillo ~]# sed 's/^.*IoT_//g' Armadillo.txt 
G4
G3
G3L
A6
A6E
Armadillo-X1
Armadillo-640
Armadillo-610
Armadillo-460
Armadillo-440
Armadillo-420
Armadillo-410
Armadillo-840
Armadillo-810    

また、マッチした文字列が存在する行を削除するには"/正規表現/d"と記述します。

以下の例では、Armadillo.txtから"4○○"、"6○○"とマッチする行を削除します。

(sedコマンドで拡張正規表現を使用するためにはrオプションを使用します。)

[armadillo ~]# sed -r '/[46][0-9]{2}$/d' Armadillo.txt 
Armadillo-IoT_G4
Armadillo-IoT_G3
Armadillo-IoT_G3L
Armadillo-IoT_A6
Armadillo-IoT_A6E
Armadillo-X1
Armadillo-840
Armadillo-810

正規表現についての記事

  1. 正規表現の使い方1(任意の文字とのマッチ)
  2. 正規表現の使い方2(連続文字とのマッチ)
  3. 正規表現の使い方3(OR条件を用いたマッチ)
  4. 正規表現の使い方4(grepによるファイル内文字列の検索)
  5. 本記事