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