Linux

【Linux】sedコマンドとは?

  • このエントリーをはてなブックマークに追加



対象読者

● 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コマンドとは?を参照下さい。

sed_prep

作成したらcatコマンドで正常に作成できているか確認しましょう。

sed_test

作成出来ている事が確認出来たらsedコマンドの挙動確認の準備が完了です。

挙動確認

ではsedコマンドを実行してみましょう。”before”を”after”に置換します。
sed 's/before/after/' sed_test.txtを実行しましょう。

sed_changed

各行の先頭にある”before”というテキストが”after”に置換されました。3行目の2つ目の”before”は変換されていない事が分かります。

sed_test.txtのファイルの中身を見てみましょう。cat sed_test.txtを実行します。

sed_chage_file

-iコマンドが付与されていないため、sed_test.txtは書き換えられていない事が分かります。次は-iコマンドを付けてみましょう。sed -i 's/before/after/' sed_test.txtを実施します。

sed_i_changed

catコマンドで中身を確認してみます。cat sed_test.txtを実行します。

cat_sed_test_change

ファイルが書き換えられている事が確認できました。

次にファイル内の該当テキストを全置換する方法を確認しましょう。

テキストの置換(全置換)

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を使ってファイルの内容を確認します。

modified

“before sed command!”が4回記載されている事が確認出来たらsedを使った全置換の挙動確認の準備が完了です。

挙動確認

ではsedコマンドで全置換を実行してみましょう。すべての”before”を”after”に置換します。
sed 's/before/after/g' sed_test.txtを実行しましょう。

sed_changed_all

gを付与しなかった際に3行目の2つ目の”before”が置換されなかったのに対し、gを付けると、全ての”before”が”after”に変わっている事が分かります。変更をファイルに反映させたい場合は先ほど同様、-iコマンドを付与します。

sed_all_file_chaged

置換コマンドは以上です。次にテキストの追加を見ていきましょう。

テキストの追加

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コマンドを利用して作成しましょう。

add_prep

挙動確認

ではsedコマンドで”line 2″の前に”this is new line 2″を追加してみましょう。
sed '2i this is new line 2' sed_test_add.txtを実行します。

this_is_new_line_2

コマンド実行前に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を利用します。

add_prep

挙動確認

ではsedコマンドで”line 3″の前に”this is new line 3″を追加してみましょう。
sed '2a this is new line 3' sed_test_add.txtを実行します。

this_is_new_line_3

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を利用します。

add_prep

挙動確認

sedコマンドで”line 3″の前に”this is new line 3″を追加してみましょう。
sed '/3/i this is new line 3' sed_test_add.txtを実行します。

this_is_new_line_3

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を利用します。

add_prep

挙動確認

sedコマンドで3というテキストが含まれる行の直後の行に”this is new line 4″を追加してみましょう。
sed '/3/a this is new line 4' sed_test_add.txtを実行します。

cat_sed_a_line_4

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_delete_2d

挙動確認

sedコマンドで2行目を削除しましょう。
sed '2d' sed_test_delete.txtを実行します。

sed_delete_result_2d

2行目が削除されました。再三の記載になりますが、ファイルに変更を反映させるには-iコマンドを付与する必要があります。

また特定の文字を削除したい場合、置換コマンドを利用し、sed 's/text//' sed_test.txtの様にsed 's/{削除対象のテキスト}//' {ファイル名}を実行する事で、対象のテキストを削除(空文字で置き換え)する事が出来ます。

【次の記事】
findコマンド

  • このエントリーをはてなブックマークに追加

お問い合わせ

    このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。

    コメントを残す

    *