Grep模式匹配省略输出中的部分

时间:2012-11-10 15:45:43

标签: regex grep

是否可以仅使用一个grepregexp组合来实现以下目标。说我有这样的文件:

$ 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

2 个答案:

答案 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