ストリームエディタ-基本コマンド

この章では、いくつかの便利なSEDコマンドについて説明します。

削除コマンド

SEDは、テキストを操作するためのさまざまなコマンドを提供します。まず、について調べてみましょう。deleteコマンド。削除コマンドを実行する方法は次のとおりです。

[address1[,address2]]d

address1 そして address2はそれぞれ開始アドレスと終了アドレスであり、行番号またはパターン文字列のいずれかです。これらのアドレスは両方ともオプションのパラメーターです。

名前が示すように、deleteコマンドは削除操作を実行するために使用され、SEDはオンラインで動作するため、このコマンドは行を削除するために使用されると言えます。deleteコマンドは、パターンバッファからのみ行を削除することに注意してください。行は出力ストリームに送信されず、元のファイルは変更されません。次の例は、ポイントを示しています。

[jerry]$ sed 'd' books.txt

しかし、出力はどこにありますか?回線アドレスが指定されていない場合、SEDはデフォルトですべての回線で動作します。したがって、パターンバッファからすべての行を削除します。そのため、コマンドは標準出力に何も出力しません。

特定の回線でのみ動作するようにSEDに指示しましょう。次の例では、4行目のみを削除します。

[jerry]$ sed '4d' 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 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

さらに、SEDはコンマ(、)を使用してアドレス範囲も受け入れます。SEDにN1からN2の行を削除するように指示できます。たとえば、次の例では、2から4までのすべての行を削除します。

[jerry]$ sed '2, 4 d' books.txt

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

1) A Storm of Swords, George R. R. Martin, 1216 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

SEDのアドレス範囲は数字だけではありません。パターンをアドレスとして指定することもできます。次の例では、著者PauloCoelhoのすべての本を削除します。

[jerry]$ sed '/Paulo Coelho/d' books.txt

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

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

テキストパターンを使用してアドレス範囲を指定することもできます。次の例では、パターン間のすべての行を削除しますStorm そして Fellowship

[jerry]$ sed '/Storm/,/Fellowship/d' books.txt  
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

これに加えて、SEDでドル($)、プラス(+)、およびチルダ(〜)演算子を使用することもできます。

コマンドの書き込み

ファイルに対して実行する重要な操作の1つはバックアップです。つまり、ファイルの別のコピーを作成します。SEDはwriteパターンバッファの内容をファイルに保存するコマンド。以下に示すのは、write に似たコマンド delete コマンド。

[address1[,address2]]w file

ここに、 address1 そして address2はそれぞれ開始アドレスと終了アドレスであり、行番号またはパターン文字列のいずれかです。これらのアドレスは両方ともオプションのパラメーターです。

上記の構文では、 w 書き込みコマンドを参照し、 fileコンテンツを保存するファイル名です。に注意してくださいfileパラメータ。ファイル名を指定すると、SEDはファイルが存在しない場合はその場でファイルを作成し、すでに存在する場合は上書きします。

SEDを使用してファイルの正確なコピーを作成しましょう。間にスペースが1つだけ存在する必要があることに注意してくださいw そして file

[jerry]$ sed -n 'w books.bak' books.txt

別のファイルを作成しました books.bak. 次に、両方のファイルの内容が同じであることを確認します。

[jerry]$ diff books.txt books.bak  
[jerry]$ echo $?

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

0

あなたは cpコマンドはまったく同じことをします。はい!ザ・cpコマンドは同じことをしますが、SEDは成熟したユーティリティです。これにより、ソースファイルから特定の行のみを含むファイルを作成できます。偶数行だけを別のファイルに保存しましょう。

[jerry]$ sed -n '2~2 w junk.txt' books.txt  
[jerry]$ cat junk.txt

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

2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

writeコマンドでは、コンマ(、)、ドル($)、およびプラス(+)演算子を使用することもできます。

これに加えて、SEDはwriteコマンドによるパターンマッチングもサポートしています。個々の著者のすべての本を別のファイルに保存するとします。退屈で時間のかかる方法の1つは手動で行うことであり、より賢い方法はSEDを使用することです。

[jerry]$ sed -n -e '/Martin/ w Martin.txt' -e '/Paulo/ w Paulo.txt' -e '/Tolkien/ w 
Tolkien.txt' books.txt

上記の例では、各行をパターンと照合し、照合した行を特定のファイルに保存しています。とても簡単です。複数のコマンドを指定するために、-eSEDコマンドのスイッチ。次に、各ファイルの内容を確認します。

[jerry]$ cat Martin.txt

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

1) A Storm of Swords, George R. R. Martin, 1216 
6) A Game of Thrones, George R. R. Martin, 864

ファイルの内容を表示してみましょう。

[jerry]$ cat Paulo.txt

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

3) The Alchemist, Paulo Coelho, 197 
5) The Pilgrimage, Paulo Coelho, 288

ファイルの内容を表示してみましょう。

[jerry]$ cat Tolkien.txt

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

2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432

優秀な!期待通りの結果が得られました。SEDは本当に素晴らしいユーティリティです。

コマンドを追加

テキストエディタの最も便利な操作の1つは、追加機能を提供することです。SEDは、appendコマンドを介してこの操作をサポートします。以下に、appendの構文を示します。

[address]a\ 
Append text

行番号4の後に新しい本のエントリを追加しましょう。次の例は、その方法を示しています。

[jerry]$ sed '4 a 7) Adultry, Paulo Coelho, 234' 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 
7) Adultry, Paulo Coelho, 234 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

コマンドセクションで、 4 行番号を意味し、 a は追加コマンドで、残りの部分は追加するテキストです。

ファイルの最後にテキスト行を挿入しましょう。これを行うには、$アドレスとして。次の例はこれを示しています。

[jerry]$ sed '$ a 7) Adultry, Paulo Coelho, 234' 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 
7) Adultry, Paulo Coelho, 234

行番号とは別に、テキストパターンを使用して住所を指定することもできます。たとえば、次の例では、文字列を照合した後にテキストを追加しますThe Alchemist

[jerry]$ sed '/The Alchemist/ a 7) Adultry, Paulo Coelho, 234' 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 
7) Adultry, Paulo Coelho, 234 
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

一致するパターンが複数ある場合は、一致するたびにテキストが追加されることに注意してください。次の例は、このシナリオを示しています。

[jerry]$ sed '/The/ a 7) Adultry, Paulo Coelho, 234' books.txt

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

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

コマンドの変更

SEDは提供します change または replacecで表されるコマンド。このコマンドは、既存の行を新しいテキストに置き換えるのに役立ちます。行範囲を指定すると、すべての行がグループとして1つのテキスト行に置き換えられます。以下に、changeコマンドの構文を示します。

[address1[,address2]]c\ 
Replace text

3行目を他のテキストに置き換えましょう。

[jerry]$ sed '3 c 3) Adultry, Paulo Coelho, 324' books.txt

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

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) Adultry, Paulo Coelho, 324 
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は、パターンもアドレスとして受け入れます。次の例では、パターンマッチングが成功すると、行が置き換えられます。

[jerry]$ sed '/The Alchemist/ c 3) Adultry, Paulo Coelho, 324' books.txt

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

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) Adultry, Paulo Coelho, 324 
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では、複数の行を1つの行に置き換えることもできます。次の例では、4番目から6番目までの行を削除し、新しいテキストに置き換えます。

[jerry]$ sed '4, 6 c 4) Adultry, Paulo Coelho, 324' 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) Adultry, Paulo Coelho, 324

挿入コマンド

挿入コマンドは、追加とほとんど同じように機能します。唯一の違いは、特定の位置の前に行を挿入することです。以下に、挿入コマンドの構文を示します。

[address]i\ 
Insert text

いくつかの例を使用して、挿入コマンドを理解しましょう。次のコマンドは、4行目の前に新しいエントリを挿入します。

[jerry]$ sed '4 i 7) Adultry, Paulo Coelho, 324' 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 
7) Adultry, Paulo Coelho, 324 
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

上記の例では、 4 はロケーション番号です。 i 挿入コマンドを意味し、残りの部分は挿入されるテキストです。

ファイルの先頭にテキストを挿入するには、次のように行アドレスを指定します 1。次のコマンドはこれを示しています。

[jerry]$ sed '1 i 7) Adultry, Paulo Coelho, 324' books.txt

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

7) Adultry, Paulo Coelho, 324
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

さらに、複数の行を挿入できます。次のコマンドは、最後の行の前に2行を挿入します。

[jerry]$ sed '$ i 7) Adultry, Paulo Coelho, 324

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

8) Eleven Minutes, Paulo Coelho, 304' 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 
7) Adultry, Paulo Coelho, 324 
8) Eleven Minutes, Paulo Coelho, 304 
6) A Game of Thrones, George R. R. Martin, 864

挿入されるエントリは別々の行に入力され、円記号(\)文字で区切られることに注意してください。

翻訳コマンド

SEDは文字を翻訳するコマンドを提供し、次のように表されます。 y。位置によって文字を変換します。以下に、translateコマンドの構文を示します。

[address1[,address2]]y/list-1/list-2/

翻訳はからの文字の位置に基づいていることに注意してください list 1 の同じ位置にいるキャラクターに list 2また、両方のリストは明示的な文字リストである必要があります。正規表現と文字クラスはサポートされていません。さらに、のサイズlist 1 そして list 2 同じでなければなりません。

次の例では、アラビア数字をローマ数字に変換します。

[jerry]$ echo "1 5 15 20" | sed 'y/151520/IVXVXX/'

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

I V IV XX

lコマンド

スペースで区切られた単語とタブ文字で区切られた単語を、それらを見ただけで区別できますか?確かにそうではありません。しかし、SEDはあなたのためにこれを行うことができます。SEDはlテキストに隠し文字を表示するコマンド。たとえば、タブ文字と\t およびEnd-Of-Linewith $キャラクター。以下に示すのは、l コマンド。

[address1[,address2]]l 
[address1[,address2]]l [len]

デモンストレーション用のタブ文字を含むファイルを作成しましょう。簡単にするために、スペースをタブに置き換えるだけで、同じファイルを使用します。待つ!しかし、それを行う方法—テキストエディタでファイルを開き、各スペースをタブに置き換えることによって?確かに違います!そのためにSEDコマンドを利用できます。

[jerry]$ sed 's/ /\t/g' books.txt > junk.txt

次に、を使用して非表示の文字を表示しましょう。 l コマンド:

[jerry]$ sed -n 'l' junk.txt

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

1)\tA\tStorm\tof\tSwords,George\tR.\tR.\tMartin,1216$ 
2)\tThe\tTwo\tTowers,J.\tR.\tR.\tTolkien,352$ 
3)\tThe\tAlchemist,Paulo\tCoelho,197$ 
4)\tThe\tFellowship\tof\tthe\tRing,J.\tR.\tR.\tTolkien,432$ 
5)\tThe\tPilgrimage,Paulo\tCoelho,288$ 
6)\tA\tGame\tof\tThrones,George\tR.\tR.\tMartin\t,864$

他のSEDコマンドと同様に、行番号とパターンもアドレスとして受け入れます。自分で試すことができます。

SEDのもう1つの興味深い機能を詳しく見てみましょう。特定の文字数の後に行の折り返しを実行するようにSEDに指示できます。次の例では、25文字の後に行を折り返します。

[jerry]$ sed -n 'l 25' books.txt

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

1) A Storm of Swords,Geo\ 
rge R. R. Martin,1216$ 
2) The Two Towers,J. R. \ 
R. Tolkien,352$ 
3) The Alchemist,Paulo C\ 
oelho,197$ 
4) The Fellowship of the\ 
 Ring,J. R. R. Tolkien,4\ 
32$ 
5) The Pilgrimage,Paulo \ 
Coelho,288$ 
6) A Game of Thrones,Geo\ 
rge R. R. Martin ,864$

上記の例では、lコマンドの後にラップ制限が指定されていることに注意してください。この場合、25文字です。このオプションはGNU固有であり、SEDの他のバリアントでは機能しない場合があります。

折り返し制限0は、改行文字がない限り、行を中断しないことを意味します。次の簡単なコマンドはこれを示しています。

[jerry]$ sed -n 'l 0' 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$

コマンドを終了する

Quitコマンドは、現在の実行フローを終了するようにSEDに指示します。それはによって表されますqコマンド。以下に、quitコマンドの構文を示します。

[address]q 
[address]q [value]

quitコマンドはアドレスの範囲を受け入れず、単一のアドレスのみをサポートすることに注意してください。デフォルトでは、SEDは読み取り、実行、および繰り返しのワークフローに従います。ただし、quitコマンドが検出されると、現在の実行が停止するだけです。

ファイルの最初の3行を印刷してみましょう。

[jerry]$ sed '3 q' 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

行番号に加えて、テキストパターンを使用することもできます。パターンマッチングが成功すると、次のコマンドは終了します。

[jerry]$ sed '/The Alchemist/ q' 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

これに加えて、SEDは valueこれは終了ステータスとして使用できます。次のコマンドは、終了ステータスを100として表示します。

[jerry]$ sed '/The Alchemist/ q 100' 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

次に、終了ステータスを確認します。

[jerry]$ echo $?

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

100

コマンドの読み取り

SEDにファイルの内容を読み取り、特定の条件が一致したときにそれらを表示するように指示できます。コマンドはアルファベットで表されますr。以下に、readコマンドの構文を示します。

[address]r file

の間にスペースが1つだけ存在する必要があることに注意してください r コマンドとファイル名。

簡単な例で理解しましょう。というサンプルファイルを作成しますjunk.txt

[jerry]$ echo "This is junk text." > junk.txt

次のコマンドは、SEDに次の内容を読み取るように指示します。 junk.txt 3行目の後に挿入します。

[jerry]$ sed '3 r junk.txt' 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 
This is junk text. 
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

上記の例では、3は回線アドレスを意味します。 r はコマンド名であり、 junk.txt内容を表示するファイル名です。さらに、GNUSEDはさまざまなアドレスも受け入れます。たとえば、次のコマンドはの内容を挿入しますjunk.txt 3行目、4行目、5行目以降。

[jerry]$ sed '3, 5 r junk.txt' 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 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
This is junk text. 
5) The Pilgrimage, Paulo Coelho, 288 
This is junk text. 
6) A Game of Thrones, George R. R. Martin, 864

他のSEDコマンドと同様に、readコマンドもパターンをアドレスとして受け入れます。たとえば、次のコマンドはの内容を挿入しますjunk.txt パターンマッチングが成功したとき。

[jerry]$ sed '/Paulo/ r junk.txt' 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 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
This is junk text. 
6) A Game of Thrones, George R. R. Martin, 864

コマンドの実行

SEDから外部コマンドを実行するには、 executeコマンド。それはによって表されますe。以下に、executeコマンドの構文を示します。

[address1[,address2]]e [command]

簡単な例でexecuteコマンドを説明しましょう。次のSEDコマンドはUNIXを実行しますdate 3行目の前のコマンド。

[jerry]$ sed '3 e date' books.txt

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

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
Sun Sep  7 18:04:49 IST 2014 
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

他のコマンドと同様に、パターンもアドレスとして受け入れます。たとえば、次の例は実行されますdateパターンマッチングが成功したときのコマンド。各パターンが一致した後、最初にコマンドが実行され、次にパターンバッファの内容が表示されることに注意してください。

[jerry]$ sed '/Paulo/ e date' books.txt

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

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

の構文を観察する場合 e 注意深く命令すると、あなたはそれに気付くでしょう commandオプションです。後にコマンドが提供されない場合e,パターンバッファの内容を外部コマンドとして扱います。これを説明するために、いくつかの簡単なコマンドを使用してcommands.txtファイルを作成しましょう。

[jerry]$ echo -e "date\ncal\nuname" > commands.txt 
[jerry]$ cat commands.txt

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

date 
cal 
uname

ファイルからのコマンドは自明です。がない場合commande,SEDは、これらすべてのコマンドを1つずつ実行します。次の簡単な例はこれを示しています。

[jerry]$ sed 'e' commands.txt

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

Sun Sep  7 18:14:20 IST 2014 
   September 2014      
Su Mo Tu We Th Fr Sa   
    1  2  3  4  5  6   
 7  8  9 10 11 12 13   
14 15 16 17 18 19 20   
21 22 23 24 25 26 27   
28 29 30               
                       
Linux

他のSEDコマンドと同様に、executeコマンドもすべての有効な範囲のアドレスを受け入れます。

その他のコマンド

デフォルトでは、SEDは単一の回線で動作しますが、複数の回線で動作することもできます。複数行のコマンドは大文字で示されます。たとえば、n コマンド、 Nコマンドはパターンスペースをクリアして印刷しません。代わりに、現在のパターンスペースの最後に改行(\ n)を追加し、入力ファイルから現在のパターンスペースに次の行を追加し、残りのSEDコマンドを実行してSEDの標準フローを続行します。以下に示すのは、N コマンド。

[address1[,address2]]N

本のタイトルとそれぞれの著者のコンマ区切りのリストを印刷してみましょう。次の例はこれを示しています。

[jerry]$ sed 'N; s/\n/, /g' books.txt

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

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin

上記の例がどのように機能するかを理解しましょう。ザ・Nコマンドは最初の行、つまり剣嵐の大地をパターンバッファに読み込み、\ nの後に次の行を追加します。パターンスペースに剣嵐の大地が含まれるようになりました\nジョージRRマーティン。次のステップでは、改行をコンマに置き換えます。

お気に入り p コマンド、私たちは持っています P によって作成された複数行パターンスペースの最初の部分(埋め込まれた改行まで)を印刷するコマンド Nコマンド。以下に示すのは、P に似たコマンド p コマンド。

[address1[,address2]]P

前の例では、 Nコマンドは、本のタイトルとその著者の改行で区切られたリストを作成します。その最初の部分、つまり本のタイトルだけを印刷しましょう。次のコマンドはこれを示しています。

[jerry]$ sed -n 'N;P' books.txt

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

A Storm of Swords 
The Two Towers 
The Alchemist 
The Fellowship of the Ring 
The Pilgrimage 
A Game of Thrones

がない場合は注意してください N、それはと同じように動作します pコマンド。次の簡単なコマンドは、このシナリオを示しています。

[jerry]$ sed -n 'P' books.txt

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

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones 
George R. R. Martin

これに加えて、SEDは vバージョンをチェックするコマンド。提供されたバージョンがインストールされたSEDバージョンよりも大きい場合、コマンドの実行は失敗します。このオプションはGNU固有であり、SEDの他のバリアントでは機能しない可能性があることに注意してください。以下に示すのは、v コマンド。

[address1[,address2]]v [version]

まず、SEDの現在のバージョンを調べます。

[jerry]$ sed --version

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

sed (GNU sed) 4.2.2

次の例では、SEDバージョンがバージョン4.2.2より大きいため、SEDコマンドはその実行を中止します。

[jerry]$ sed 'v 4.2.3' books.txt

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

sed: -e expression #1, char 7: expected newer version of sed

ただし、提供されたバージョンがバージョン4.2.2以下の場合、コマンドは期待どおりに機能します。

[jerry]$ sed 'v 4.2.2' books.txt

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

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones George R. R. Martin