正则表达式匹配引号之间的字符串

时间:2013-05-20 13:58:28

标签: regex linux bash shell

我正在使用shell脚本读取文件,然后将输出传递给grep并尝试提取包含在两个引号之间的字符串(同时排除引号)。

./readFile.sh | grep -e "[\^\"]*[\?\"]"

这将返回我正在阅读的文件I的全部内容。

我的文件以这种方式组织:

TITLE="foo"
DATA="bar"
SERVER="foo.bar.server"

我在这里阅读了正则表达式教程http://www.regular-expressions.info/lookaround.html并试图尽可能地使用前瞻和后视,但我不明白这里有什么问题。

4 个答案:

答案 0 :(得分:7)

使用带有look-behind

grep检查此示例
kent$  echo 'TITLE="foo"
DATA="bar"
SERVER="foo.bar.server"'|grep -Po '(?<=")[^"]*'
foo
bar
foo.bar.server

替代方案是grep -Po '"\K[^"]*'

答案 1 :(得分:2)

我不明白为什么你使用脚本进行文件阅读,因为grep适用于文件,但它是你自己的选择(也许你做了一些预处理)。

这提取了&#39;&#39;&#39;:

之间的内容
$ grep -o '".*"' <file>
"foo"
"bar"
"foo.bar.server"

如果你需要摆脱&#39;&#39;&#39;:

$ grep -o '".*"' <file> | tr -d '"'
foo
bar
foo.bar.server

答案 2 :(得分:1)

如果你想给awk一个机会,那很简单:

awk -F '"' 'NF>2{print $2}' inFile

答案 3 :(得分:0)

如果您希望grep仅返回匹配的字符串(而不是整行),则应使用-o(或--only-matching)选项。