はじめに
SEDは、Unixシステムでファイルをすばやく効率的に編集するために使用されるテキストストリームエディタです。このツールは、テキストエディタでファイルを開かなくても、テキストファイルの行を検索、置換、追加、および削除します。
sed
の使用方法を学ぶ わかりやすい例によるコマンドとそのオプション。
Linuxsed構文
Linux sed
を使用するための主な構文 コマンドは次のとおりです:
sed OPTIONS... [SCRIPT] [INPUTFILE...]
sedLinuxオプション
sed
を実行できます 次のコマンドラインオプションを使用します。
-b 、-バイナリ | 入力ファイルをバイナリモードで開いて、行が改行で終了することを検討します。 |
-debug | デバッグモードに切り替えて、入力を標準形式で出力し、プログラムの実行に注釈を付けます。 |
-follow-symlinks | 指定したファイルがシンボリックリンクの場合は、最終的な宛先を編集します。 -i と組み合わせた場合にのみ機能します オプション。 |
-ヘルプ | 使用情報を表示します。 |
-i 、-インプレース[=SUFFIX] | 元のファイルを上書きして、その場で編集を実行します。 |
-posix | POSIXのすべての拡張機能を無効にするsed ポータブルスクリプトの作成を簡素化するため。 |
-バージョン | sed のバージョンを表示します システム上で実行されています。 |
-E 、 -r 、 -regexp-extended | 拡張正規表現を使用します。 |
-e script 、 -expression = script | 指定したスクリプトを追加して、コマンドで実行します。 |
-f script-file | 指定したスクリプトファイルの内容を追加して、コマンドで実行します。 |
-l <em> N 、 -line-length = N | l に必要な折り返しの長さを定義します コマンド(デフォルト値は70)。 |
-n 、-静かな 、-サイレント | 出力印刷を無効にします。 |
-s 、-個別 | 指定されたファイルを、単一の連続した長いストリームとしてではなく、個別に表示します。 |
-サンドボックス | 外部プログラムの実行を無効にし、コマンドラインの入力ファイルのみを操作します。 |
-u 、-バッファなし | 入力バッファと出力バッファを最小化します。 |
-z 、 --null-data 、-ゼロで終了コード> | 入力を一連の行として表示します。各行はゼロバイトで終わります。 |
Linuxsedの例
以下に、一般的に使用される10個の sed
を示します。 コマンド、例、および構文。
このチュートリアルでは、 foxinbox.txという名前でサンプルファイルを作成しました。 次の内容のt:
Knox in box.
Fox in socks.
Knox on fox in socks in box.
Socks on Knox and Knox in box.
Fox in socks on box on Knox.
sed
に注意してください 指示がない限り、ソースファイルには影響しません。代わりに、コマンドは、指定されたコマンドによって行われた変更を出力に表示します。
元のファイルを上書きするには、 -i
を使用します 変更を保存するオプション。ただし、コマンド出力をテストする前に、このような方法はお勧めしません。
または、編集内容を別の(または新しい)ファイルに保存します。 > newfilename.txt
を追加して、出力をリダイレクトします コマンドの最後に。
sedコマンドを使用して文字列を置き換える
Linuxのsed
コマンドは、テキストの置換に最も一般的に使用されます。ファイル内の指定されたパターンを検索し、必要な文字列に置き換えます。
sed
を使用してテキストを置き換えるには 、代替コマンド s
を使用します および区切り文字(ほとんどの場合、スラッシュ- /
)テキストフィールドを区切るため。
したがって、テキストを置き換えるための構文は次のとおりです。
sed 's/old_string/new_string/' filename.txt
old_string
を置き換えます 置換するテキストとnew_string
変更したいテキストで。
たとえば、 box
のインスタンスを置き換えるには bin
という単語で 、実行:
sed 's/box/bin/' foxinbox.txt
出力には、下の画像のように、単語が置き換えられたテキストが表示されます。
sedコマンドを使用して文字列のすべての出現箇所を置き換えます
デフォルトでは、 sed
各行で指定された文字列の最初の出現箇所のみを置き換えます。行内の指定された単語の最初のインスタンスを検索し、それを置き換えて、次の行に移動します。
box
という単語の複数のインスタンス 同じ行で、コマンドは最初のコマンドのみを置き換えます。
1行に同じ単語のインスタンスが複数ある場合は、 g
を追加します それらすべてを変更するコマンドにフラグを立てます。
テキスト内の特定の文字列の各出現箇所を置き換えるためのコマンドは次のとおりです。
sed 's/old_string/new_string/g' filename.txt
box
という単語を置き換えるには bin
という単語で ファイルfoxinbox.txt 毎回、次のように入力します:
sed 's/box/bin/g' foxinbox.txt
上記の出力は、コマンドが単語 box
のすべてのインスタンスを置き換えたことを示しています 。
sedコマンドを使用して行内の特定のオカレンスを置き換える
sed
コマンドを使用すると、各行内で置き換える指定された文字列の出現箇所を選択できます。これを行うには、 1
などの数値フラグを追加します 、 2
、など:
sed 's/old_string/new_string/#' filename.txt
たとえば、単語 box
の2番目のオカレンスを置き換えるには bin
という単語を含むテキストの各行 、次のコマンドを使用します:
sed 's/box/bin/2' foxinbox.txt
コマンドは単語の3つのインスタンスをスキップしました。これは、それらが最初の行にあり、最後の1つだけを置き換えたためです。
代替テキストを含む行のみを印刷する
デフォルトでは、 sed
コマンドは、ファイルの内容全体を、その出力の代替テキストとともに出力します。テキストが多く、変更が適用された行に焦点を当てたい場合は、必要な属性をコマンドに追加します。
指定された条件下で置換された行だけを印刷するには、次の構文を使用します。
sed -n 's/old_string/new_string/p' filename.txt
-n
オプションは自動印刷を無効にし、代替コマンドは p
sed
に指示します 置換が発生する行を印刷します。
p
を追加できます 以下の例のように、他の代替コマンドへのコマンド:
sed -n 's/box/bin/2p' foxinbox.txt
このコマンドは、単語 box
の2番目のインスタンスを置き換えます 行に変更が行われた行を印刷します。下の画像では、置換が適用された1行のみが表示されています。
sedコマンドを使用して文字列を置き換えて大文字と小文字を区別しない
デフォルトでは、 sed
コマンドでは大文字と小文字が区別されます。たとえば、次のコンテンツには fox
という単語が含まれています 大文字と小文字の最初の文字:
Knox in box.
Fox in socks.
Knox on fox in socks in box.
Socks on Knox and Knox in box.
Fox in socks on box on Knox.
foxという単語のすべてのインスタンスを置き換える 、通常のコマンドを実行しないでください:
sed 's/fox/cow/' foxinbox.txt
コマンドの結果は、単語 fox
の出現を変更するだけです。 完全に小文字の場合:
テキストを置き換えるときに大文字と小文字を区別しない場合は、 i
を追加します コマンドの最後にあるサブコマンド:
sed 's/old_string/new_string/i' filename.txt
したがって、 foxという単語の大文字と小文字のインスタンスを変更するためのコマンド 上記のテキストの内容は次のとおりです。
sed 's/fox/cow/i' foxinbox.txt
出力には、コマンドが指定された文字列の3つのインスタンスすべてを変更したことが示されます。
sedコマンドを使用して特定の行の文字列を置き換える
sed
コマンドを使用すると、 s
にプレフィックスとして行番号を追加することにより、特定の行の文字列を置き換えることができます。 サブコマンド:
sed '# s/old_string/new_string/' filename.txt
サンプルfoxinbox.txtでこの機能をテストするには ファイルの場合、 socks
という単語を置き換えます サンダル
付き 4行目のみ( 4
)コマンドを使用したテキストの:
sed '4 s/socks/sandals/' foxinbox.txt
出力は、単語 socks
の最初のインスタンスを示しています 2行目は同じままですが、同じ単語がサンダル
に置き換えられています 4行目。
sedコマンドを使用して特定の行範囲でのみ文字列を置き換える
テキスト全体ではなく、行範囲内の文字列の複数のインスタンスを置き換えるには、 sed
する範囲を指定します 代替へ。構文は次のとおりです。
sed '#,# s/old_string/new_string/' filename.txt
最初の#
を置き換えます 最初の行番号と2番目の#
含める最後の行番号。
たとえば、靴下という単語の最後の2つのインスタンスを置き換えるには ファイルfoxinbox.txt (4行目と6行目にあります)サンダル
という単語が含まれています 、実行します:
sed '4,6 s/socks/sandals/' foxinbox.txt
sedコマンドを使用して特定の行を削除する
sed
を使用してファイルから行を削除するには コマンド、 d
を使用します サブコマンドと構文:
sed '#d' filename.txt
ハッシュの代わりに削除する行番号を指定します( #
)記号を付けてコマンドを実行します。
たとえば、 foxinbox.txtから2行目を削除するには ファイル、タイプ:
sed '2d' foxinbox.txt
sedコマンドを使用して特定の行範囲内の行を削除する
sed
を使用して行範囲内の複数の行を削除するには コマンド、構文に従ってください:
sed '#,#d' filename.txt
ハッシュ記号を行範囲の最初と最後に置き換えます。例:
sed '2,4d' foxinbox.txt
上記のコマンドは、ファイルから2、3、4行目を削除します。
sedコマンドを使用して特定の行から最後の行に削除
特定の行番号から最後の行までの行を削除するには、次のコマンドを使用します。
sed '#,$d' filename.txt
つまり、3行目から foxinbox.txtの最後までのすべてを削除します。 、次のコマンドを実行します:
sed '3,$d' foxinbox.txt