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

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

はじめに

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

Linux
  1. Linuxsedコマンドの使用方法

  2. Linuxgrepコマンドの使用方法

  3. Linuxでhistoryコマンドを使用する方法

  1. Linuxの履歴コマンドの使用方法

  2. Linuxでidコマンドを使用する方法

  3. Linux で「screen」コマンドを使用する方法

  1. Linuxでmd5sumコマンドを使用する方法

  2. Linuxxargsコマンドの使用方法

  3. Linuxteeコマンドの使用方法