sed
私は置換を実行し、成功状態を条件として使用して行を印刷する良い使い方を見つけました。
$ seq 3 | sed -n 's/2/B/ p'
B
この短い形式を拡張してより多くのことができるかどうか疑問に思います。良い、
- この行は、交換が成功した場合にのみ印刷されますが、
- 印刷する前に別の作業を行う必要があります。
可能ですか?以下を試しましたが失敗しました。
$ seq 3 | sed -n 's/2/B/ {p}'
sed: -e expression #1, char 8: unknown option to `s'
ベストアンサー1
/2/
より複雑なコマンドのアドレスとして使用できます。
sed -n '/2/ { s/2/B/; /BB/d; p; }'
これは、少なくとも1つを含む行に対して最初の出現を2
with2
に置き換えてからB
(この場合、この置換はs//B/
「最も近い一致式を使用する」を意味する空の正規表現に短縮される可能性があります)、行を削除します。部分文字列が含まれているBB
場合は、その行が出力されます(削除されていない場合)。他のラインはまったく出力されません-n
。
また、使用することができます
sed -e '/2/!d' -e 'other commands'
これにより、それを含まないすべての行が削除され、残りの行に2
適用されます。other commands
それぞれ与えられたを使用する複数の式を使用すること-e
は、入力ストリームに一連のコマンドを適用する標準的な方法ですsed
。ほとんどの最新のsed
実装では、区切られた式も理解しています;
。 GNUを最初に見るsed
必要はありません。;
}