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

3
我正在使用一个shell脚本来读取文件,然后将输出传输到grep并尝试提取两个引号之间包含的字符串(同时排除引号)。
./readFile.sh | grep -e "[\^\"]*[\?\"]"

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

我的文件组织方式如下:

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

我在这里阅读了正则表达式教程 http://www.regular-expressions.info/lookaround.html,并尽力使用前瞻和后顾来解决问题,但我不明白下面的错误出在哪里。

4个回答

7

使用具有后顾断言的grep命令检查此示例。

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

另一种方法是使用 grep -Po '"\K[^"]*'


这个程序可以运行,但是在每个字符串输出之间会有两个空行。 - hax0r_n_code
你的 readFile.sh 的输出是什么?如果它与答案中的示例完全相同,则没有空行。 - Kent

3
如果你想尝试使用awk,那么非常简单:
awk -F '"' 'NF>2{print $2}' inFile

2
我不理解为什么你要使用脚本来读取文件,因为grep可以处理文件,但这是你自己的选择(也许你正在进行一些预处理)。
这将提取位于“”之间的内容:
$ grep -o '".*"' <file>
"foo"
"bar"
"foo.bar.server"

如果你需要去掉引号“'”:

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

我的脚本不仅仅是读取文件,我只是为了简化示例而这样做。 - hax0r_n_code

0
如果你想让 grep 仅返回匹配的字符串(而非整行),你应该使用 -o(或 --only-matching)选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接