GNU/Linux >> Linux の 問題 >  >> Linux

sed の紹介 (ストリーム エディター) :便利な sed コマンドの例

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


Linux
  1. Linuxでの12の便利なWgetコマンドの例

  2. 5 firewall-cmd コマンドの便利な例

  3. Linux での sed コマンドの例

  1. Linuxでのlsコマンド:17の便利な例の説明

  2. Dockerpsコマンドの便利な例

  3. 10 Sed (ストリーム エディター) コマンドの例

  1. Linux sedコマンド:ストリームエディタの使用方法

  2. 14Linuxで役立つ「ls」コマンドの例

  3. 9Linuxでの便利なtouchコマンドの例