在以下示例中,sed
匹配以a a
或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。
—
2013年