sed - 印刷と分岐

sed - 印刷と分岐

ファイル形式を表す文字列を含む入力ストリームがあります。テキスト以外のすべてのファイル形式を印刷したいです。またはPostScriptです(PostScriptはテキストファイル形式です)。次のsed式を試しました。

sed -n '/PostScript/pb; /text/!p'

ただし、これはエラーを返します。

sed: -e expression #1, char 14: extra characters after command

bpパターンの後に複数のコマンド(たとえば)を指定することが許可されていると思ったので、これは私を混乱させます。

次の式を使用して、目的の動作を取得できます。

sed -n '/PostScript/p; /PostScript/b; /text/!p'

/PostScript/式のパターンを繰り返さずに目的の動作を取得するにはどうすればよいですか?

ベストアンサー1

コマンドグループを一緒に実行する一般的な方法(パターンマッチングなどの条件を適用する)は、コマンドを中括弧でグループ化することです。
GNUの使用sed:

sed -n '/PostScript/{p; b}; /text/!p'

sedどちらの場合も、グループ化とスクリプトの終わりに分岐がなく、他の行が削除されます。

sed -e '/PostScript/b' -e '/text/!b' -e 'd'

また記録のため:

bpパターンの後に複数のコマンド(たとえば)を指定することが許可されていると思います。

アドレスの編集コマンド(話すモードはコンテキストアドレスです)とs代替フラグgpおよび他のものwですno.

後者の構文は次のとおりです。

s/pattern/replacement/[flags]

つまり、フラグを組み合わせることができます(たとえば、gpまたは7w outfile)、電子の構文は次のとおりです。

[2addr] {editing command
editing command
...
}

つまり、コマンドは改行で区切る必要があります(場合によってはセミコロンで区切ることができます)。

おすすめ記事