4

是否可以仅使用一个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
4

2 回答 2

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
于 2012-11-10T16:06:23.950 回答
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
于 2012-11-10T15:52:22.847 回答