В следующем примере sed
сопоставляет строки, начинающиеся с a
или или, c
и печатает первый символ этой строки ( a
или c
):
$ echo "ag
bh
ci
dj
ek
fl" | sed 's/\(a\|c\)./\1/' # 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\)./\1/'
output:
a
c
То, что вы действительно хотели знать, не имеет значения, но ваш паттерн должен начинаться с ^, поэтому он привязан к началу строки. Как закодировано, это будет соответствовать a или c в любом месте строки, если это не последний символ.
—
Джо