logo

Linux/Unix の Sed コマンドと例

UNIX の SED コマンドはストリーム エディタの略で、ファイルの検索、検索と置換、挿入、削除などの多くの機能を実行できます。 UNIX における SED コマンドの最も一般的な使用法は、置換または検索と置換です。 SED を使用すると、ファイルを開かなくても編集できます。これは、最初に VI エディタでファイルを開いて変更するよりも、ファイル内の何かを検索して置換する方がはるかに迅速な方法です。

  • SED は強力なテキスト ストリーム エディタです。挿入、削除、検索、置換(置換)が可能です。
  • UNIX の SED コマンドは正規表現をサポートしており、複雑なパターン マッチングを実行できます。

構文:

 sed OPTIONS... [SCRIPT] [INPUTFILE...]>

例:
以下のテキスト ファイルを入力として考慮します。



 $cat>geekfile.txt>>
 unix is great os. unix is opensource. unix is free os. learn operating system. unix linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>

サンプルコマンド

    文字列の置換または置換 : Sed コマンドは主に、ファイル内のテキストを置換するために使用されます。以下の単純な sed コマンドは、ファイル内の単語 unix を linux に置き換えます。
     $sed 's/unix/linux/' geekfile.txt>

    出力:

     linux is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>

    ここで、 s は置換演算を指定します。 / は区切り文字です。 unix は検索パターン、linux は置換文字列です。

    デフォルトでは、sed コマンドは各行のパターンの最初の出現箇所を置き換えますが、行内の 2 番目、3 番目…の出現箇所は置き換えません。 行内のパターンの n 番目の出現を置換する: /1、/2 などのフラグを使用して、行内のパターンの最初と 2 番目の出現を置き換えます。以下のコマンドは、行内で 2 番目に出現する単語 unix を linux に置き換えます。

     $sed 's/unix/linux/2' geekfile.txt>

    出力:

     unix is great os. linux is opensource. unix is free os. learn operating system. unix linux which one you choose. unix is easy to learn.linux is a multiuser os.Learn unix .unix is a powerful.>
    行内のパターンの出現をすべて置換: 置換フラグ /g (グローバル置換) は、行内の文字列の出現をすべて置換するように sed コマンドを指定します。
     $sed 's/unix/linux/g' geekfile.txt>

    出力:

     linux is great os. linux is opensource. linux is free os. learn operating system. linux linux which one you choose. linux is easy to learn.linux is a multiuser os.Learn linux .linux is a powerful.>
    行内の n 番目の出現からすべての出現への置換: /1、/2 などと /g の組み合わせを使用して、行内のパターンの n 番目の出現からすべてのパターンを置換します。次の sed コマンドは、行内の 3 番目、4 番目、5 番目…の unix ワードを Linux ワードに置き換えます。
     $sed 's/unix/linux/3g' geekfile.txt>

    出力:

     unix is great os. unix is opensource. linux is free os. learn operating system. unix linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn linux .linux is a powerful.>
    各単語の最初の文字を括弧で囲む : この sed の例では、すべての単語の最初の文字を括弧内に出力します。
     $ echo 'Welcome To The Geek Stuff' | sed 's/([A-Z])/(1)/g'>

    出力:

    メイブンのインストール
     (W)elcome (T)o (T)he (G)eek (S)tuff>
    特定の行番号の文字列を置換: sed コマンドを制限して、特定の行番号の文字列を置換できます。例としては、
     $sed '3 s/unix/linux/' geekfile.txt>

    出力:

     unix is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>

    上記の sed コマンドは、3 行目の文字列のみを置き換えます。 /p フラグを使用して置換された行を複製する: /p 印刷フラグは、置換された行を端末上で 2 回印刷します。行に検索パターンがなく置換されない場合、 /p はその行を 1 回だけ出力します。

     $sed 's/unix/linux/p' geekfile.txt>

    出力:

     linux is great os. unix is opensource. unix is free os. linux is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>
    置換された行のみを印刷する: 置換された行のみを表示するには、-n オプションを /p 印刷フラグとともに使用します。ここで、-n オプションは、/p フラグによって生成される重複行を抑制し、置換された行を 1 回だけ出力します。
     $sed -n 's/unix/linux/p' geekfile.txt>

    出力:

     linux is great os. unix is opensource. unix is free os. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>

    /p を指定せずに -n だけを使用した場合、sed は何も出力しません。 行範囲の文字列を置換する : 文字列を置換するために sed コマンドに行番号の範囲を指定できます。

     $sed '1,3 s/unix/linux/' geekfile.txt>

    出力:

     linux is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>

    ここで、sed コマンドは行を 1 から 3 の範囲に置き換えます。別の例は次のとおりです。

     $sed '2,$ s/unix/linux/' geekfile.txt>

    出力:

     unix is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful>

    ここで、$ はファイルの最後の行を示します。したがって、sed コマンドはファイルの 2 行目から最後の行までのテキストを置き換えます。 特定のファイルからの行の削除: SED コマンドは、特定のファイルからの行の削除にも使用できます。 SEDコマンドは、ファイルを開かずに削除操作を実行するために使用されます。
    例:
    1. 特定の行を削除するには、この例では「n」と入力します。

     Syntax: $ sed 'nd' filename.txt Example: $ sed '5d' filename.txt>

    2. 最後の行を削除するには

     Syntax: $ sed '$d' filename.txt>

    3. x から y までの範囲の行を削除するには

     Syntax: $ sed 'x,yd' filename.txt Example: $ sed '3,6d' filename.txt>

    4. n行目から最終行までを削除する場合

     Syntax: $ sed 'nth,$d' filename.txt Example: $ sed '12,$d' filename.txt>

    5. パターン一致行を削除するには

     Syntax: $ sed '/pattern/d' filename.txt Example: $ sed '/abc/d' filename.txt>


Linux の SED コマンド |セット2