使用Bash从字符串变量中删除括号分隔的子字符串

时间:2018-01-30 22:26:12

标签: bash shell awk sed centos7

我在变量中有这个字符串:

strVar="Hello World [randomSubstring].zip"

我想提取[randomSubstring],其中括号内的子字符串可以是任何内容。

预期结果必须是这样的:

echo "$strVar"
Hello World .zip

我尝试了几种与grep和awk的组合,但没有成功,我使用的是CentOS 7。

echo "Hello World [RNVE5Z].zip" | grep -oP '(?<=[).*(?=])'
echo "Hello World [RNVE5Z].zip" | awk -F"["" '{print $1}' | awk -F"]" '{print $2}' 

2 个答案:

答案 0 :(得分:4)

仅限Bash:

echo ${strVar/\[*\]/}

答案 1 :(得分:1)

只需使用bash的子字符串操作:

echo ${strVar/\[*\]/}

我更喜欢通过对sed的外部调用,除了还有更多工作要做,为什么我还是使用sed:

echo $strVar | sed 's/\[.*\]//'

我不认为grep有一个优雅的解决方案,但可能是错的。在awk我不是那么流利。