1

我正在使用 shell 脚本读取文件,然后将输出通过管道传输到 grep 并尝试提取包含在两个引号之间的字符串(同时不包括引号)。

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

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

我的文件是这样组织的:

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

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

4

4 回答 4

7

grep 用look-behind检查这个例子

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

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

于 2013-05-20T14:04:05.403 回答
2

我不明白你为什么使用脚本来读取文件,因为 grep 可以处理文件,但这是你自己的选择(也许你做了一些预处理)。

这提取了 '"' 之间的内容:

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

如果你需要摆脱'"':

$ grep -o '".*"' <file> | tr -d '"'
foo
bar
foo.bar.server
于 2013-05-20T14:07:06.550 回答
2

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

awk -F '"' 'NF>2{print $2}' inFile
于 2013-05-20T14:10:32.277 回答
0

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

于 2013-05-20T14:02:41.080 回答