4

grep次のことを達成するために、1つだけと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
4

2 に答える 2

2

シードを使用できます

~$ 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

UPDATED ...または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 に答える