是否可以仅使用一个grep
和regexp
组合来实现以下目标。说我有这样的文件:
$ cat f.txt
line 1 foo
line 2 boo
no match
line 3 blank
line X no match
我希望匹配以单词line
开头的所有行,后跟一个数字,但只显示之后的内容,以及(.*)
匹配的部分。
$ grep -E '^line [0-9]+(.*)' f.txt
line 1 foo
line 2 boo
line 3 blank
你能说匹配但不显示这部分^line [0-9]+
,就像做grep -o '^line [0-9]+'
所以我的预期输出看起来像这样
$ grep -E ***__magic__*** f.txt
foo
boo
blank
答案 0 :(得分:2)
您可以使用sed
~$ cat 1.txt
line 1 foo
line 2 boo
no match
line 3 blank
line X no match
$ grep -E '^line [0-9]' 1.txt | sed 's/^line [0-9] //'
foo
boo
blank
<强>已更新强> ......或不使用sed
$ grep -E '^line [0-9]' 1.txt | grep -oE '[a-z]*$'
foo
boo
blank
答案 1 :(得分:1)
给出您的示例文件:
$ cat cat_1.txt
line 1 foo
line 2 boo
no match
line 3 blank
line X no match
使用Perl很容易:
perl -lne 'print $1 if /^line \d+ (.*)/' cat_1.txt
或sed:
sed -En 's/^line [0-9]+ (.*)/\1/p' cat_1.txt
无论是哪种情况,打印:
foo
boo
blank