这个问题来自this other。
字符串是:
string1 [string2] string3 string4
我想获取:
[string2]
这是包括括号 [
和]
。
首选方法:Bash shell运算符,如this answer。
谢谢你。
答案 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