2013-05-20 157 views
1

我使用一个shell脚本中读取文件,然后通过管道输出到grep,并试图提取包含两个引号之间(同时排除引号)字符串之间的字符串。正则表达式匹配报价

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

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

我的文件组织是这样的:

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

我这里http://www.regular-expressions.info/lookaround.html阅读正则表达式的教程,并试图用超前和作为最好的,我可以回顾后,但我不明白什么是错在这里。

回答

7

检查这个例子与grep与向后看

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

选择是grep -Po '"\K[^"]*'

+0

这个工作,但是,我得到两个空行之间的每个字符串的输出 –

+0

什么是你的'readFi的输出le.sh'?如果它看起来与答案中的示例完全相同,则不存在空行。 – Kent

+0

你是对的它的readFile.sh –

0

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

2

我不明白为什么你用一个脚本文件读取,因为grep的处理文件工作,但它是你的自己的选择(也许你做一些预处理)。

这提取之间是什么'“:如果你需要摆脱

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

'”:

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

以及我的脚本不只是阅读文件,我只是让它看起来这样简单的例子。 –

1

如果你想给AWK一个机会,它是非常简单的:

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