【发布时间】:2015-02-02 05:09:13
【问题描述】:
这个问题来自this other。
字符串是:
string1 [string2] string3 string4
我想获得:
[string2]
这是,包括括号 [ 和 ]。
首选方法:Bash shell 运算符,如this answer。
谢谢。
【问题讨论】:
这个问题来自this other。
字符串是:
string1 [string2] string3 string4
我想获得:
[string2]
这是,包括括号 [ 和 ]。
首选方法:Bash shell 运算符,如this answer。
谢谢。
【问题讨论】:
作为一个肮脏而快速的解决方案,只需在结果中添加括号:
echo "[$STR]"
这行得通。
【讨论】:
要保留括号,只需执行以下操作:
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]
【讨论】:
使用 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]
【讨论】:
我在你链接的答案中没有找到任何正则表达式解决方案,所以你去吧:
str="string1 [string2] string3"
if [[ $str =~ \[.*\] ]]; then
echo "${BASH_REMATCH[0]}"
else
echo >&2 "Not found!"
fi
【讨论】: