Как заставить sed опустить не совпадающие строки?

в следующем примере, sed соответствует строкам, начинающимся с a или c и печатает первый символ этой строки (a или c):

$ echo "ag
bh
ci
dj
ek
fl" | sed 's/(a|c).//' # Matches lines starting with 'a' or 'c'.

output:
a
bh
c
dj
ek
fl

однако строки, которые не соответствуют шаблону, также печатаются. Как мне рассказать sed чтобы исключить строки, которые не соответствуют шаблону? Я могу получить желаемый эффект, комбинируя его с grep (как следует), но я хотел бы знать, если sed можно добиться того, что "по себя."

$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/(a|c).//'

output:
a
c
12
задан freitass
08.11.2022 13:35 Количество просмотров материала 2494
Распечатать страницу

1 ответ

использовать no-print флаг (-n) и явно выведите успешные команды замены (s///p):

 sed -n 's/\(a\|c\).//p'
12
отвечен Thor 2022-11-09 21:23

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх