web-dev-qa-db-ja.com

sedに置換で一致しない行を削除させる方法

私は基本的にこれをしたい:

cat file | grep '<expression>' | sed 's/<expression>/<replacement>/g'

式を2回記述する必要はありません。

cat file | sed 's/<expression>/<replacement>/g'

代替コマンドの正規表現と一致しない行を印刷しないようにsedに指示する方法はありますか?

23
Ropez

置換したいテキストを含むファイルがあるとします。

$ cat new.text 
A
B

Aをtheに変更したい場合は、理想的には次のようにします-

$ sed 's/A/a/' new.text 
a
B

ただし、置換の影響を受けない行を取得したくない場合は、次のようにnとpの組み合わせを使用できます-

$ sed -n 's/A/a/p' new.text 
a
25
jaypal singh

これはあなたのために働くかもしれません:

sed '/<expression>/!d;s//<replacement>/g' file

または

sed 's/<expression>/<replacement>/gp;d' file
17
potong
cat file | sed -n '/<expression>/{s//<replacement>/g;p;}'
4
mitchnull