我在变量中有这个字符串:
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}'
答案 0 :(得分:4)
仅限Bash:
echo ${strVar/\[*\]/}
答案 1 :(得分:1)
只需使用bash的子字符串操作:
echo ${strVar/\[*\]/}
我更喜欢通过对sed的外部调用,除了还有更多工作要做,为什么我还是使用sed:
echo $strVar | sed 's/\[.*\]//'
我不认为grep有一个优雅的解决方案,但可能是错的。在awk我不是那么流利。