如何使用SED从字符串中提取双引号之间的所有单词

如何使用SED从字符串中提取双引号之间的所有单词,sed,Sed,我想用一个regexp,比如 .*?"([^"]+).*?"/g 从字符串中提取双引号之间的所有单词。 例如: 我想得到: 1 2 6 是的,我知道我可以使用grep,但是有必要通过sed来实现它。没有BRE或ERE可以实现您想要的功能,因此不能通过sed在一个regexp中实现。如果可以接受,您可以在sed中执行此操作: $ sed -E 's/^[^"]*"|"[^"]*$//g; s/"[^"]+"/ /g; s/ +/ /g' file 1 2 6 当前正则表达式有什么问题?sed

我想用一个regexp,比如

.*?"([^"]+).*?"/g
从字符串中提取双引号之间的所有单词。 例如:

我想得到:

1 2 6


是的,我知道我可以使用grep,但是有必要通过sed来实现它。没有BRE或ERE可以实现您想要的功能,因此不能通过sed在一个regexp中实现。如果可以接受,您可以在sed中执行此操作:

$ sed -E 's/^[^"]*"|"[^"]*$//g; s/"[^"]+"/ /g; s/ +/ /g' file
1 2 6

当前正则表达式有什么问题?
sed
默认情况下使用基本正则表达式,其中
+
是文本,一些风格支持使用
-r
-E
启用扩展正则表达式,将
+
视为元字符。请尝试
“\([^”]*\)“
。在许多Linux版本上,paren通常需要转义。@andlrc。您也可以经常使用
\+
来表示元字符。没有sed,就没有grep。使用支持XML的工具。