Sed-basic-syntax

提供:Dev Guides
移動先:案内検索

ストリームエディター-基本構文

この章では、SEDがサポートする基本的なコマンドとそのコマンドライン構文を紹介します。 SEDは、次の2つの形式で呼び出すことができます。

sed [-n] [-e] 'command(s)' files
sed [-n] -f scriptfile files

最初の形式では、コマンドをインラインで指定でき、それらは単一引用符で囲まれます。 後者では、SEDコマンドを含むスクリプトファイルを指定できます。 ただし、両方のフォームを複数回一緒に使用できます。 SEDは、その動作を制御するためのさまざまなコマンドラインオプションを提供します。

複数のSEDコマンドを指定する方法を見てみましょう。 SEDは、特定の行を削除する delete コマンドを提供します。 1行目、2行目、5行目を削除しましょう。 当分の間、deleteコマンドのすべての詳細を無視してください。 削除コマンドの詳細については後で説明します。

まず、 cat コマンドを使用してファイルの内容を表示します。

[jerry]$ cat books.txt

上記のコードを実行すると、次の結果が得られます。

1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864

次に、特定の行のみを削除するようにSEDに指示します。 ここでは、3行を削除するために、-eオプションで3つの個別のコマンドを指定しています。

[jerry]$ sed -e '1d' -e '2d' -e '5d' books.txt

上記のコードを実行すると、次の結果が得られます。

3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
6) A Game of Thrones, George R. R. Martin, 864

さらに、複数のSEDコマンドをテキストファイルに記述し、テキストファイルをSEDの引数として提供できます。 SEDは、パターンバッファーに各コマンドを適用できます。 次の例は、SEDの2番目の形式を示しています。

まず、SEDコマンドを含むテキストファイルを作成します。 わかりやすくするために、同じSEDコマンドを使用してみましょう。

[jerry]$ echo -e "1d\n2d\n5d" > commands.txt
[jerry]$ cat commands.txt

上記のコードを実行すると、次の結果が得られます。

1d
2d
5d

次に、テキストファイルからコマンドを読み取るようにSEDに指示します。 ここで、上記の例で示したのと同じ結果が得られます。

[jerry]$ sed -f commands.txt books.txt

上記のコードを実行すると、次の結果が得られます。

3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
6) A Game of Thrones,George R. R. Martin, 864

標準オプション

SEDは次の標準オプションをサポートしています。

  • -n:パターンバッファのデフォルトの印刷。 たとえば、次のSEDコマンドは出力を表示しません。
[jerry]$ sed -n '' quote.txt

-e:次の引数は編集コマンドです。 ここで、角括弧は必須パラメーターを意味します。 このオプションを使用すると、複数のコマンドを指定できます。 各行を2回印刷します。

[jerry]$ sed -e '' -e 'p' quote.txt

上記のコードを実行すると、次の結果が得られます。

There is only one thing that makes a dream impossible to achieve: the fear of failure.
There is only one thing that makes a dream impossible to achieve: the fear of failure.
 - Paulo Coelho, The Alchemist
 - Paulo Coelho, The Alchemist
  • -f:次の引数は、編集コマンドを含むファイルです。 山括弧は必須パラメーターを意味します。 次の例では、ファイルを介して印刷コマンドを指定します。
[jerry]$ echo "p" > commands
[jerry]$ sed -n -f commands quote.txt

上記のコードを実行すると、次の結果が得られます。

There is only one thing that makes a dream impossible to achieve: the fear of failure.
 - Paulo Coelho, The Alchemist

GNU固有のオプション

GNU固有のSEDオプションについて簡単に説明します。 これらのオプションはGNU固有のものであることに注意してください。また、SEDの他のバリアントではサポートされない場合があります。 後のセクションで、これらのオプションについて詳しく説明します。

  • -n、-quiet、-silent:標準の-nオプションと同じです。
  • -e script、-expression = script:標準の-eオプションと同じです。
  • -f script-file、-file = script-file:標準の-fオプションと同じです。
  • --follow-symlinks:このオプションが提供されている場合、SEDはファイルをその場で編集しながらシンボリックリンクをたどります。
  • -i [SUFFIX]、--in-place [= SUFFIX]:このオプションは、ファイルをその場で編集するために使用されます。 接尾辞が指定されている場合、元のファイルのバックアップが作成されます。指定されていない場合は、元のファイルが上書きされます。
  • -l N、--line-lenght = N:このオプションは、lコマンドの行の長さをN文字に設定します。
  • --posix:このオプションは、すべてのGNU拡張機能を無効にします。
  • -r、-regexp-extended:このオプションにより、基本的な正規表現ではなく拡張正規表現を使用できます。
  • -u、-unbuffered:このオプションを指定すると、SEDは最小量のデータを入力ファイルからロードし、出力バッファーをより頻繁にフラッシュします。 出力を待たないときに、「tail -f」の出力を編集するのに便利です。
  • -z、-null-data:デフォルトでは、SEDは各行を改行文字で区切ります。 NULLデータオプションが指定されている場合、行をNULL文字で区切ります。