Bash脚本-返回正则表达式捕获组内容

Bash脚本-返回正则表达式捕获组内容,bash,sed,Bash,Sed,我正在寻找一种能够在Bash脚本中解析字符串的方法。 以下是测试字符串: test=“+------------+----------计数(4)+------------+------------+--+--0++------------+” 我试着用Sed这样做: echo $(echo $test | sed -r 's/|\s(\d+)\s|/\1/') 这将返回整个测试字符串 对于原始Bash脚本: pattern='|\s(\d+)\s|' if [[ "$test&quo

我正在寻找一种能够在Bash脚本中解析字符串的方法。 以下是测试字符串:

test=“+------------+----------计数(4)+------------+------------+--+--0++------------+”

我试着用Sed这样做:

echo $(echo $test | sed -r 's/|\s(\d+)\s|/\1/')
这将返回整个测试字符串

对于原始Bash脚本:

pattern='|\s(\d+)\s|'
if [[ "$test" =~ $pattern ]]
then
        echo "${BASH_REMATCH[1]}"
fi
这不会返回任何内容


我做错了什么以及如何做到这一点?

您需要将整个字符串与正则表达式模式匹配,使用带有
p
标志的
-n
选项,并使用
[0-9]
/
[:digit:]
匹配数字,因为POSIX正则表达式不支持
\d
速记:

sed -rn 's/.*\s([0-9]+)\s.*|/\1/p' <<< "$s"

见a。同样,如果
\s
不受支持,请使用
[[:space:]

sed不支持
\d
使用
[[:digit:]]
操作码至少有4个不同的问题,并且不是所有问题都包含在其中。
pattern='\|\s([0-9]+)\s\|'