只要告诉我“”之间的话

时间:2013-12-08 11:56:05

标签: regex awk

我有像这样的文字行

blahblah"word1"blahblah"word2"blahblah"word3"

我只想要引号之间和没有引号的文本。我可以做一个awk和我们“作为一个分隔符。然后得到每一秒匹配。但是,有什么方法我可以使用awk(或其他命令)返回引号之间的单词?所以我会回来word1,word2,word3?

谢谢,

3 个答案:

答案 0 :(得分:1)

你走了:

echo 'blahblah"word1"blahblah"word2"blahblah"word3"' | perl -ne 'print map("$_\n", m/"([^"]*)"/g)'

答案 1 :(得分:1)

取决于您正在使用的语言,但正则表达式将是:

(?<=^(("[^"]*){2})*")[^"]+(?=")

该示例将匹配“s之间的所有内容。如果您希望它仅匹配”s之间的单词,请使用:

(?<=^(("[^"]*){2})*")\b+(?=")

主要区别在于第二个例子,不允许使用空格和大多数特殊字符。在第一个例子中,除了“s”之外的所有字符都将被允许在“s”之间。这包括新行。

答案 2 :(得分:1)

不健壮,但有趣:

sed -E 's/(^|")[^"]*("|$)/ /g'