Как заставить sed удалить строки, не совпадающие с заменой

В основном я хочу сделать следующее:

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

без необходимости писать выражение дважды:

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

Есть ли способ запретить sed печатать строки, не соответствующие стандартному выражение в подстановочной команде?

23
задан Ropez 22 November 2011 в 11:10
поделиться

3 ответа

Скажем, у вас есть файл, содержащий текст, который вы хотите заменить.

$ 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
25
ответ дан 29 November 2019 в 01:51
поделиться

Как насчет:

cat file | sed 'd/<expression>/'

Удалять соответствующие шаблоны из входных данных. Конечно, это противоположно тому, что вы хотите, но, может быть, вы можете сделать противоположное регулярное выражение?

Пожалуйста, не то, чтобы я не был полностью уверен в синтаксисе, только использовал его пару раз назад .

-2
ответ дан 29 November 2019 в 01:51
поделиться
cat file | sed -n '/<expression>/{s//<replacement>/g;p;}'
4
ответ дан 29 November 2019 в 01:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: