sedのPコマンドはどのように機能しますか?

sedのPコマンドはどのように機能しますか?

sed 状態に関する文書

現在のパターンスペースに最初に含まれている改行文字を印刷します。

私はいくつかの実験をしてそれを理解しようとしました。以下は私のテストです。

root:[~]# seq 3 | sed -n '/2/{iline1\nline2;P}'
sed: -e expression #1, char 0: unmatched `{'
root:[~]#

ここでは、-nパターンスペースの自動印刷は無効になります。/2/を含む2行目と一致します2。したがって、2行目が一致すると、パターンスペースに内容があります2。このiコマンドは、line1\nline2パターン空間の先頭に改行文字を挿入します。したがって、パターンスペースにはコンテンツが必要ですline1\nline2\n2。今すぐP注文最初の新しい行で印刷したがって、line1印刷する必要があり、完全なコマンドの結果でなければなりません。私の理解は正しいですか?エラーが発生するのはなぜですか?よろしくお願いします。

ベストアンサー1

このiコマンドはパターン空間に何も挿入しません。標準出力にテキストを書き込みます。

より良い例は次のとおりです。

$ cat file
line 1
line 2
line 3
line 4
$ sed -n 'N;P' file
line 1
line 3

このsedスクリプトはパターン空間として1行を読み込みます。このNコマンドは、パターン空間に次の入力行を追加し、その間に改行文字を挿入します。挿入された改行文字のパターンスペースPに最初の行を書き込みます。N次のサイクルが始まります(サイクルが終わると出力がないため-n)。

おすすめ記事