【发布时间】:2018-05-30 13:39:55
【问题描述】:
我有一个文本文件,我正在尝试使用 bash 脚本获取包含 $..$ 分隔符(LaTeX 公式)之间的字符串数组。我当前的代码不起作用,结果为空:
#!/bin/bash
array=($(grep -o '\$([^\$]*)\$' test.txt))
echo ${array[@]}
我测试了这个正则表达式here,它找到了匹配项。我使用以下测试字符串:
b5f1e7$bfc2439c621353$d1ce0$629f$b8b5
预期结果是
bfc2439c621353 629f
但是 echo 返回空。虽然如果我使用'[0-9]\+' 它可以工作:
5 1 7 2439 621353 1 0 629 8 5
我做错了什么?
【问题讨论】:
-
您实际上想要获得 captures,而不是匹配项。
grep不允许您访问捕获组。使用awk可以更好地处理分隔文本。如果你想使用正则表达式,Perl 是最好的选择。另请注意,(和)是 BRE POSIX 正则表达式模式中的文字(和)符号。 -
你没有逃脱你的括号 - grep 试图匹配文字 ('s
-
@hek2mgl 这怎么不清楚?我认为这个问题已经得到了清晰的解释,并带有可重现的代码示例。
-
@TomLord 改变主意了,我认为你是对的