我有一个文本文件,其中包含以下内容(例如):
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及其选项单独做到这一点?
答案 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