目次
対象読者
● Linuxコマンド初学者
要点
● sedコマンド = ファイル内の文字の置換・追加・削除を行うコマンド
○ 各行の1つ目のマッチを置換:
sed 's/{置換対象のテキスト}/{置換に利用するテキスト}/' {編集対象のファイル}
○ 全置換:
sed's/{置換対象のテキスト}/{置換に利用するテキスト/g' {編集対象のファイル}
○ 追加は以下の通り
– 指定した行の前にテキストを追加:
sed '{行数}i {追加するテキスト}' {編集対象のファイル}
– 指定した行の後にテキストを追加:
sed '{行数}a {追加するテキスト}' {編集対象のファイル}
– 指定したテキストが存在する行の前の行にテキストを追加:
sed '/{追加をトリガーするテキスト}/i {追加するテキスト}' {編集対象のファイル}
– 指定したテキストが存在する後の行にテキストを追加:
sed '/{追加をトリガーするテキスト}/a {追加するテキスト}' {編集対象のファイル}
○ 指定行の削除は
sed '{行数}d'{編集対象のファイル}
○ 変更をファイルに反映する場合は
-i
オプションを追加
sedコマンドとは?
sedコマンドは、ファイルの編集を行う事が出来るコマンドです。ファイル内の文字の置換・追加・削除が実施可能です。
置換・追加・削除の方法を順番に見ていきましょう。
テキストの置換(各行の1つ目のマッチを置換)
sedコマンドを利用した文字の置換は、sed 's/before/after/' sed_test.txt
のようにsed 's/{置換対象のテキスト}/{置換に利用するテキスト}/' {編集対象のファイル}
という形式で利用します。
sed 's/before/after/' sed_test.txt
の例の場合、ファイル内の”before”という文字を”after”に変更するコマンドとなります。タイトルに”各行の1つ目のマッチを置換”と記載している様に、こちらのコマンドを利用すると、各行にて一番初めに出てきた置換対象のテキストを変換するコマンドとなります。同じ行に置換対象のテキストが2つ以上出てきた場合でも置換するのは最初のテキストのみになるという事です。
また、sed -i 's/before/after/' sed_test.txt
のように-i
コマンドを付与する事で、ファイルを書き換える事が出来ます。-i
コマンドが無いsed 's/before/after/' sed_test.txt
の場合だと、置換後のデータがターミナルに表示されるのみとなります。
実際に動作を見て確認しましょう。
まずはターミナル(Windowsの場合git bashなど)を開いてください。
事前準備
挙動確認の準備をします。viコマンドを利用してデスクトップの階層にsed_test.txt
を新規作成しましょう。
コマンドはvi sed_test_before.txt
となります。
実行したら、以下のように”before sed command!”と4回書き込みを行います。3行目に”before sed command!”を2回記載しましょう。
※viコマンドの詳細は【Linux】viコマンドとは?を参照下さい。
作成したらcatコマンドで正常に作成できているか確認しましょう。
作成出来ている事が確認出来たらsedコマンドの挙動確認の準備が完了です。
挙動確認
ではsedコマンドを実行してみましょう。”before”を”after”に置換します。
sed 's/before/after/' sed_test.txt
を実行しましょう。
各行の先頭にある”before”というテキストが”after”に置換されました。3行目の2つ目の”before”は変換されていない事が分かります。
sed_test.txt
のファイルの中身を見てみましょう。cat sed_test.txt
を実行します。
-i
コマンドが付与されていないため、sed_test.txt
は書き換えられていない事が分かります。次は-i
コマンドを付けてみましょう。sed -i 's/before/after/' sed_test.txt
を実施します。
catコマンドで中身を確認してみます。cat sed_test.txt
を実行します。
ファイルが書き換えられている事が確認できました。
次にファイル内の該当テキストを全置換する方法を確認しましょう。
テキストの置換(全置換)
sedコマンドを利用した全置換は、sed 's/before/after/g' sed_test.txt
のようにsed 's/{置換対象のテキスト}/{置換に利用するテキスト}/g' {編集対象のファイル}
という形式で利用します。''
内で最後にg
を指定する事で全置換を実施する事が可能です。
では動作を見て確認しましょう。
事前準備
先程のsed_test.txt
を利用します。まず、sed -i 's/after/before' sed_test.txt
を実行し、ファイル内が全て”before sed command!”と記載されている状態に戻します。実行したら、cat sed_test.txt
を使ってファイルの内容を確認します。
“before sed command!”が4回記載されている事が確認出来たらsedを使った全置換の挙動確認の準備が完了です。
挙動確認
ではsedコマンドで全置換を実行してみましょう。すべての”before”を”after”に置換します。
sed 's/before/after/g' sed_test.txt
を実行しましょう。
g
を付与しなかった際に3行目の2つ目の”before”が置換されなかったのに対し、g
を付けると、全ての”before”が”after”に変わっている事が分かります。変更をファイルに反映させたい場合は先ほど同様、-i
コマンドを付与します。
置換コマンドは以上です。次にテキストの追加を見ていきましょう。
テキストの追加
sedコマンドを利用した文字の追加は4パターン存在します。
① 指定した行の前にテキストを追加
② 指定した行の後にテキストを追加
③ 指定したテキストが存在する行の前にテキストを追加
④ 指定したテキストが存在する行の後にテキストを追加
これらを順に確認します。
指定した行の前にテキストを追加
指定行の前に文字を追加するには、sed '2i this is new line 2' sed_test.txt
のようにsed '{行数}i {追加するテキスト}' {編集対象のファイル}
という形式で利用します。
sed '2i this is new line 2' sed_test.txt
の場合、2行目に”this is new line 2″が追加されます。
実際に動作を見て確認します。
事前準備
新しいファイルを作成しましょう。デスクトップにsed_test_add.txt
を作成し、ファイル内に”line 1″ ~ “line 4″を行ごとに記載します。viコマンドを利用して作成しましょう。
挙動確認
ではsedコマンドで”line 2″の前に”this is new line 2″を追加してみましょう。
sed '2i this is new line 2' sed_test_add.txt
を実行します。
コマンド実行前に2行目だった”line 2″の前に”this is new line 2″が追加された事が分かります。
指定した行の後にテキストを追加
指定行の後に文字を追加するには、sed '2a this is new line 3' sed_test.txt
のようにsed '{行数}a {追加するテキスト}' {編集対象のファイル}
という形式で利用します。
sed '2a this is new line 3' sed_test.txt
の場合、3行目(2a
で2行目の後を指定しているから)に”this is new line 3″が追加されます。
実際に動作を見て確認します。
事前準備
先程のsed_test_add.txt
を利用します。
挙動確認
ではsedコマンドで”line 3″の前に”this is new line 3″を追加してみましょう。
sed '2a this is new line 3' sed_test_add.txt
を実行します。
2行目の後ろ、すなわち3行目に”this is new line 3″が追加された事が分かります。
指定したテキストが存在する行の前にテキストを追加
sedコマンドでは、指定したテキストを含む行の前に文字を追加する事も出来ます。つまりトリガーとなるテキストを指定する事で、そのテキストが含まれる行の直前の行にテキストが追加できます。
sed '/3/i this is new line 3' sed_test_add.txt
のようにsed '/{トリガーとなるテキスト}/i {追加するテキスト}' {編集対象のファイル}
という形式で利用します。
sed '/3/i this is new line 3' sed_test_add.txt
の場合、3
というテキストが含まれる行の前の行に”this is new line 3″が追加されます。
実際に動作を見て確認します。
事前準備
先程のsed_test_add.txt
を利用します。
挙動確認
sedコマンドで”line 3″の前に”this is new line 3″を追加してみましょう。
sed '/3/i this is new line 3' sed_test_add.txt
を実行します。
3
というテキストが含まれる行の前の行(つまり3行目)に、”this is new line 3″が追加された事が分かります。
指定したテキストが存在する行の後ろにテキストを追加
指定したテキストを含む行の後ろに文字を追加するコマンドは、sed '/3/a this is new line 4' sed_test_add.txt
のようにsed '/{トリガーとなるテキスト}/a {追加するテキスト}' {編集対象のファイル}
という形式で利用します。
sed '/3/a this is new line 4' sed_test_add.txt
の場合、3
というテキストが含まれる行の後の行に”this is new line 4″が追加されます。
事前準備
先程のsed_test_add.txt
を利用します。
挙動確認
sedコマンドで3
というテキストが含まれる行の直後の行に”this is new line 4″を追加してみましょう。
sed '/3/a this is new line 4' sed_test_add.txt
を実行します。
3
というテキストが含まれる行の直後の行(つまり4行目)に、”this is new line 4″が追加された事が分かります。
次にファイル内の指定行を削除する方法を確認しましょう。
指定した行の削除
指定したテキストを含む行の後ろに文字を追加するコマンドは、sed '2d' sed_test_delete.txt
のように、sed '{行数}d'{編集対象のファイル}
という形式で利用します。
sed '2d' sed_test_delete.txt
の場合、sed_test_delete.txt
の2行目を削除します。
事前準備
先程のsed_test_delete.txt
を作成します。viコマンドを利用し、ファイル内各行に”line 1″~”line 5″を記載しましょう。
挙動確認
sedコマンドで2行目を削除しましょう。
sed '2d' sed_test_delete.txt
を実行します。
2行目が削除されました。再三の記載になりますが、ファイルに変更を反映させるには-i
コマンドを付与する必要があります。
また特定の文字を削除したい場合、置換コマンドを利用し、sed 's/text//' sed_test.txt
の様にsed 's/{削除対象のテキスト}//' {ファイル名}
を実行する事で、対象のテキストを削除(空文字で置き換え)する事が出来ます。
【次の記事】
findコマンド