如何从grep输出中删除最后一个字符?

时间:2014-11-13 09:29:25

标签: grep text-processing

我有一个文本文件,其中包含以下内容(例如):

In first line the "One", second"Two " & " Three " and also"Four    ". 
In second line also nested "foo "bar" baz""zoo" patterns.

我试图在一对引号之间包含所有字符串,最后我最终得到了这个命令:

grep -Po '"\K[^"]+"' file

这个命令给我的内容如下:

One"
Two "
 Three "
Four    "
foo "
 baz"
zoo"

并且我想要的来自上面的结果,因为我想要的输出是:

One
Two 
 Three 
Four    
foo 
 baz
zoo

请有人帮我删除上述"输出中的最后一个grep。我不想从输出中删除空格。我没有任何扩展到多行的词。 e.g:

... "foo "bar" ba
z""zoo" ...

拜托,请不要建议我可以使用多个命令,我知道我可以。我问你是否可以用grep及其选项单独做到这一点?

2 个答案:

答案 0 :(得分:2)

这可以通过下面的grep one-liner进行。

$ grep -oP '"\K[^"]+(?="(?:[^"]*"[^"]*")*[^"]*$)' file
One
Two 
 Three 
Four    
foo 
 baz
zoo

另一个黑客通过PCRE动词(*SKIP)(*F)

$ grep -oP '[^"]+(?=(?:"[^"]*"[^"]*)*[^"]*$)(*SKIP)(*F)|[^"]+' file
One
Two 
 Three 
Four    
foo 
 baz
zoo

答案 1 :(得分:1)

如果您无法使用awk

解决问题,则可以使用grep
awk -F\" '{for (i=2;i<=NF;i+=2) {gsub(/ /,"");print $i}}' file
One
Two
Three
Four
foo
baz
zoo

awk -F\" '{for (i=2;i<=NF;i+=2) print $i}'
One
Two
 Three
Four
foo
 baz
zoo