我正在使用shell脚本读取文件,然后将输出传递给grep并尝试提取包含在两个引号之间的字符串(同时排除引号)。
./readFile.sh | grep -e "[\^\"]*[\?\"]"
这将返回我正在阅读的文件I的全部内容。
我的文件以这种方式组织:
TITLE="foo"
DATA="bar"
SERVER="foo.bar.server"
我在这里阅读了正则表达式教程http://www.regular-expressions.info/lookaround.html并试图尽可能地使用前瞻和后视,但我不明白这里有什么问题。
答案 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
)选项。