SedコマンドまたはStream Editorは、Linux/Unixシステムで提供されている非常に強力なユーティリティです。 主にテキストの置換、検索 & 置換に使用されますが、挿入、削除、検索などの他のテキスト操作も行うことができます。 SEDでは、実際にファイルを開くことなく、完全なファイルを編集することができます。
この記事では、いくつかの例を見ながら、SEDコマンドの使い方を学びます。
sed OPTIONS…
では、いくつかの例を見てみましょう。
Example :1) ファイルの一部のテキストを表示する
sedを使うと、ファイル全体を見るのではなく、ファイルの一部だけを見ることができます。 ファイルの一部の行を表示するには、次のコマンドを使用します
$ sed -n 22,29p testfile.txt
ここで、オプション ‘n’ は、ファイル全体の印刷を抑制します & オプション ‘p’ は、22行目から29行目までの行を印刷します
Example :2) 一部の行を除いて表示する
ファイルの内容を一部を除いて表示するには、次のコマンドを使用します
$ sed 22,29d testfile.txt
オプションの’d’を指定すると、指定した行を出力から削除します。) N行目から3行目までの内容を表示する
2行目から3行目までの内容を表示するには、以下のコマンドを使用します
$ sed -n '2~3p' file.txt
Example :4 ) sedコマンドによる行の削除
ファイルからsedで行を削除するには、次のコマンドを使用します
$ sed Nd testfile.txt
ここで、’N’は行番号です & オプションの’d’は、指定された行番号を削除します。 ファイルの最終行を削除するには
$ sed $d testfile.txt
例 :5) 行の範囲を削除する
ファイルから行の範囲を削除するには
$ sed '29,34d' testfile.txt
これでtestfile.txtファイルから29行目から34行目までが削除されます
例 :6) 指定した行以外の行を削除する
指定した行以外の行をファイルから削除するには、’!’を使用します
$ sed '29,34!d' testfile.txt
ここでは、’!’オプションを使用しないので、条件を逆にして、つまり指定した行を削除しません。 29-34行目以外のすべての行がtestfile.txtから削除されます
Example :7) 空白行/空白の追加
すべての非空白行の後に空白行を追加するには、オプション「G」を使用します
$ sed G testfile.txt
Example :8) sedによる文字列の検索と置換
ファイルから文字列を検索&置換するには、次のような例を使います。
$ sed 's/danger/safety/' testfile.txt
ここでオプション「s」を指定すると、単語「danger」&を「safety」に置き換える検索を、すべての行で最初に出現したものだけを対象に行います。
例:9) sedを使ってファイル全体から文字列を検索して置き換える
ファイルから単語を完全に置き換えるには、オプションの’g’を’s’に変更します
$ sed 's/danger/safety/g' testfile.txt
例:10)
ファイルから何回目かの出現で文字列を置換することもできます。 例えば、「danger」を「safety」に置き換えるのは、2回目の出現時のみとなります
$ sed ‘s/danger/safety/2’ testfile.txt
ファイル全体の各行の2回目の出現時に「danger」を置き換えるには
$ sed 's/danger/safety/2g' testfile.txt
例 :11) 特定の行の文字列を置換する
特定の行の文字列のみを置換するには
$ sed '4 s/danger/safety/' testfile.txt
これでファイルの4行目の文字列のみが置換されます。 また、1行ではなく、複数の行を指定することもできます
$ sed '4,9 s/danger/safety/' testfile.txt
Example :12) マッチした検索の後/前に行を追加する
すべてのパターンマッチの後に何らかのコンテンツを持つ新しい行を追加するには、オプション ‘a’ を使用します
$ sed '/danger/a "This is new line with text after match"' testfile.txt
すべてのパターンマッチの前に何らかのコンテンツ a を持つ新しい行を追加するには、オプション ‘i’ を使用します
$ sed '/danger/i "This is new line with text before match" ' testfile.txt
例 :13) 検索パターンにマッチしたときに行全体を変更する
検索パターンにマッチしたときに行全体を新しい行に変更するには、sedでオプション’c’を使用する必要があります。
$ sed '/danger/c "This will be the new line" ' testfile.txt
従って、パターンが’danger’にマッチした場合、行全体が言及された行に変更されます。
sedの高度なオプション
今まではsedで単純な式を使っていましたが、ここからは正規表現を使ったsedの高度な使い方について説明します
Example :14) 複数の sed コマンドの実行
複数の sed 式を実行する必要がある場合、オプション ‘e’ を使用して sed コマンドを連鎖させることができます
$ sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt
Example :15) ファイルを編集する前にバックアップコピーを作成する
ファイルを編集する前にバックアップコピーを作成するには、オプション「-i.bak」を使用します
$ sed -i.bak -e 's/danger/safety/g' testfile.txt
これは、拡張子が.bakのファイルのバックアップコピーを作成します。
Example :16) &で始まるファイルの行をパターンで削除する
特定の文字列&で始まる行を別の文字列で終了するように削除するには、以下のようにします。
$ sed -e 's/^danger.*stops$//g' testfile.txt
これは、最初に「danger」がある行 & 最後に「stops」がある行 & の間にはいくつでも単語を入れることができ、「.
Example :17) 行の追加
sed & の正規表現を使用して、各行の前にコンテンツを追加するには
$ sed -e 's/.*/testing sed &/' testfile.txt
これで、すべての行の前に「testing sed」と表示されます。) コメントされた行をすべて削除する & 空の行
コメントされた行、つまり# & すべての空の行
$ sed -e 's/#.*//;/^$/d' testfile.txt
コメントされた行だけを削除するには
$ sed -e 's/#.*//' testfile.txt
例 :19) /etc/passwdから全ユーザー名のリストを取得する
/etc/passwdファイルから全ユーザー名のリストを取得するには、
$ sed 's/\(*\).*/\1/' /etc/passwd
全ユーザー名の完全なリストが出力として画面に生成されます。
例題 :20) sedコマンドによるシステムリンクの上書きを防ぐ
「sed -i」コマンドは、システムリンクを削除することが知られています && このような状況を避けるために、sed -i がリンクを破壊するのを防ぐには、実行するコマンドに「-follow-symklinks」オプションを使用します。