sed エディタの紹介
sed という用語 ストリーム エディタの略 . Sed は、標準入力から入力を受け取り、要求された編集をストリームに適用し、結果を自動的に標準出力に出力できます。 sed 構文を使用すると、コマンド ラインで入力ファイルを指定できます。
sed エディターの実行中に対話する必要はありません。したがって、バッチ エディターとも呼ばれます。これは、インタラクティブな vi や ed などのエディターとは対照的です。 sed は対話を必要としないため、sed コマンドをスクリプトに配置できます。スクリプト ファイルを呼び出してデータ ファイルに対して実行し、繰り返し編集操作を実行できます。
コマンド形式
sed コマンドの構文は次のとおりです。
# sed [options] 'action [args]' files [ > outfile]
sed エディターは、正規表現構文を使用して、テキスト パターンの置換とテキスト パターンの削除を実行できます。これらは、grep で使用されるものと同じ正規表現文字です。
sed コマンドは、対話型テキスト編集の拡張機能を提供します。多数のファイル内のテキスト文字列を検索して置換する必要がある場合は、sed が最も便利です。
編集コマンド
sed エディターは、vi および ed で使用するものと同様の編集コマンド (表に示す) を使用します。
コマンド | 機能 |
---|---|
d | 行を削除 |
p | 行を印刷します |
r | ファイルを読む |
ある文字列を別の文字列に置き換えます | |
w | ファイルへの書き込み |
sed コマンドには 2 つのオプションがあります:
オプション | 関数 |
---|---|
-n | デフォルトの出力を抑制します |
-f | スクリプト ファイルから sed コマンドを読み取ります |
例で使用されているサンプル データ
次の例では、「data.txt」という名前のファイルに対して sed コマンドを実行します。ファイル data.txt の内容は次のとおりです。
# cat data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
sed を使用してテキストを出力する
例 1 :行の印刷範囲
次の例は、一連の行を stdout に出力する p (印刷) コマンドの使用法を示しています。範囲は、開始アドレス、カンマ、終了アドレスの順で指定します。 sed のデフォルトの出力は、読み取った各行です。デフォルトの出力を抑制するには、-n オプションを使用してください。
# sed -n '3,5p' data.txt southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3
例 2 :特定のパターンを含む行の印刷
次のコマンドは、パターン west を含むすべての行を出力します。スラッシュ (/) を使用して正規表現を区切ります。
# sed -n '/west/p' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33
例 3 :複数のパターンでラインを印刷する
次のコマンドは、west というパターンを含む最初の行から、souther というパターンを含む次の行までを出力します。
# sed -n '/west/,/southern/p' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45
例 4 :パターンのある行とその後のすべての行を印刷する
次のコマンドは、パターン Chris を含む最初の行からファイルの最後の行までを出力します。
# sed -n '/Chris/,$p' data.txt southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
例 5 :grep と同様の機能
パターンには、grep で使用される正規表現文字が含まれる場合があります。次の例は、s で始まり 5 で終わるすべての行を出力します。
# sed -n '/^s.*5$/p' data.txt southern SO May Chin 45
sed を使用してテキストを置き換える
コマンド | 例 | 編集アクション |
---|---|---|
sed s/x/y/option | 検索して置換します。検索パターン x はパターン y に置き換えられます。ほとんどの場合、検索と置換パターンは正規表現であり、検索と置換の動作はさまざまなオプションによって影響を受ける可能性があります。 | |
y | sed y/abc/xyz/ | ソース文字セットのすべての文字を、宛先文字セットで同じ位置にある文字に置き換えます。 |
例 1 :特定のパターンを検索して置換する
sed コマンドを使用すると、テキストに対して検索および置換操作を実行できます。このコマンドは、パターン検索とリテラル文字列の置換を使用します。置換文字列の文字は、メタ文字展開なしで文字どおりに取得されます。
# sed 's/3/X/' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster X3 southern SO May Chin 45 southeast SE Derek Johnson X eastern EA Susan Beal X4 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
sed コマンドは、ファイルの各行をチェックし、最初に見つかった古い文字列を新しい文字列に置き換えます。同じ行内の古い文字列の後続のオカレンスは変更されません。
例 2 :特定のパターンをグローバルに検索して置換する
次の例は、g (グローバル) を示しています s (検索と置換) を使用したコマンド コマンドを実行し、古い文字列をすべて新しい文字列に置き換えます。
# sed 's/3/X/g' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster XX southern SO May Chin 45 southeast SE Derek Johnson X eastern EA Susan Beal X4 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
例 3 :置換に含まれる検索パターンを使用した検索と置換
検索と置換を行うと、古い文字列が新しい置換文字列の一部になることがあります。これは、置換文字列に &(アンパサンド) を配置することで実現できます。 &の位置によって、置換文字列内の古い文字列の位置が決まります。
次の例の目的は、最後のフィールドが 1 桁で終わるすべての行を検索し、1 桁を 1 桁の数字と文字列 Single Digit で置き換えるコマンドを作成することです。
最後のフィールドに 1 桁の数字がある行を正しく識別するには、次の sed コマンドを検討してください。各行のフィールドはタブで区切られています。
sed -n '/ [0-9]$/p' data.txt southeast SE Derek Johnson 3
次のコマンドは、最後のフィールドが 1 桁で終わるすべての行を検索し、1 桁を 1 桁の数字と文字列 Single Digit で置き換えます。
# sed 's/ [0-9]$/& Single Digit/' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 Single Digit eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
sed を使用してテキストを削除する
例 1 :行の範囲を削除する
次のコマンドは、出力から 4 行目から 8 行目を削除します。
# sed '4,8d' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 central CT Sheri Watson 44
例 2 :特定のパターンを含む行を削除する
次のコマンドは、パターン west を含むすべての行を削除します。
# sed '/west/d' data.txt southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
例 3
次のコマンドは、パターン west で始まるすべての行を削除します。
# sed '/^west/d' data.txt northwest NW Joel Craig 10 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
例 4
次のコマンドは、パターン south を含む最初の行から、north を含むファイルの次の行までの行の範囲を削除します。
# sed '/south/,/north/d' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 north NO Val Shultz 91 central CT Sheri Watson 44
追加の sed 機能 – コマンドの編集
追加の sed エディター コマンドを次の表に示します。
コマンド | 機能 |
---|---|
a | テキストを追加 |
c | 現在の行のテキストを新しいテキストに変更します |
私 | 現在の行の上にテキストを挿入 |
単一の sed コマンドに複数の編集を配置する
ファイルに対して複数の編集を実行したい場合があります。複数の sed コマンドを使用する代わりに、-e オプションを使用して、編集内容を同じコマンド ラインに配置できます。編集は指定した順序で実行されます。
例 1
行を慎重に削除します。テキスト行に対して編集を実行した後、そのテキスト行を出力から削除する場合があります。これは、入力ファイルの 1 行目の次の例で発生します。
# sed -e 's/north/North/' -e '1,4d' data.txt southeast SE Derek Johnson 3 eastern EA Susan Beal 34 Northeast NE TJ Nichols 67 North NO Val Shultz 91 central CT Sheri Watson 44