从括号中提取字符串,包括括号

时间:2015-02-01 02:38:58

标签: string bash shell

这个问题来自this other

字符串是:

string1 [string2] string3 string4

我想获取

[string2]

这是包括括号 []

首选方法:Bash shell运算符,如this answer

谢谢你。

4 个答案:

答案 0 :(得分:1)

作为一个肮脏而快速的解决方案,只需在结果中添加括号:

echo "[$STR]"

这很有效。

答案 1 :(得分:0)

要保留括号,只需执行以下操作:

astr="string1 [string2] string3"

astr=${astr/*[/[}
astr=${astr/]*/]}

echo "$astr"

<强>输出

[string2]

它也可以用awk来完成,这可能更强大,因为它会打印出方括号所包围的所有字符串,例如:

astr="[string1] [string2] string3"
echo "$astr" | awk 'NR>1{print "["$1"]"}' RS=[ FS=]

<强>输出

[string1]
[string2]

答案 2 :(得分:0)

使用awk

echo "string1 [string2] [string3] string4"|awk '{for(i=1;i<=NF;++i){if($i~/^\[[^ ]+\]$/){print $i}}}'

输出

[string2]
[string3]

使用sed

 echo "string1 [string2] [string3] string4"|sed -r 's/ *[^[ ]+[^]]( |$)//g;s/ +/\n/g'

输出

[string2]
[string3]

答案 3 :(得分:0)

我没有在您链接的答案中找到任何正则表达式解决方案,所以请转到:

str="string1 [string2] string3"
if [[ $str =~ \[.*\] ]]; then
    echo "${BASH_REMATCH[0]}"
else
    echo >&2 "Not found!"
fi