В основном я хочу сделать следующее:
cat file | grep '<expression>' | sed 's/<expression>/<replacement>/g'
без необходимости писать выражение дважды:
cat file | sed 's/<expression>/<replacement>/g'
Есть ли способ запретить sed печатать строки, не соответствующие стандартному выражение в подстановочной команде?
Скажем, у вас есть файл, содержащий текст, который вы хотите заменить.
$ cat new.text
A
B
Если вы хотите изменить A на a, то в идеале мы делаем следующее -
$ sed 's/A/a/' new.text
a
B
Но если вы не хотите получать строки, на которые замена не влияет, вы можете используйте комбинацию n и p следующим образом -
$ sed -n 's/A/a/p' new.text
a
Как насчет:
cat file | sed 'd/<expression>/'
Удалять соответствующие шаблоны из входных данных. Конечно, это противоположно тому, что вы хотите, но, может быть, вы можете сделать противоположное регулярное выражение?
Пожалуйста, не то, чтобы я не был полностью уверен в синтаксисе, только использовал его пару раз назад .
cat file | sed -n '/<expression>/{s//<replacement>/g;p;}'