我在bash中有一个类似于以下内容的字符串:
string=P001_WA05_1_i5-_i7-SI_GA_A5_1_S1_*_
我想用星号替换_[0-9]_
之后的W[[:alpha:]]+([0-9])
,并用星号替换[0-9]_[[:alpha:]][0-9]
之后的SI_GA_[[:alpha:]]+([0-9])
。
此字符串的期望输出为P001_WA05*i5-_i7-SI_GA_A5_*_*_
这怎么办?我在正则表达式中包含了上述格式,但是我不确定如何在显示的模式后用星号替换显示的值。
谢谢, 杰克
答案 0 :(得分:0)
您可以通过${BASH_REMATCH[1]}
等重用括号包围的匹配模式作为后向引用。然后您可以说:
string=P001_WA05_1_i5-_i7-SI_GA_A5_1_S1_*_
if [[ $string =~ (.*W[[:alpha:]][0-9]+)_[0-9]_(.*SI_GA_[[:alpha:]]+[0-9]_)[0-9]_[[:alpha:]][0-9](.*) ]]; then
string="${BASH_REMATCH[1]}*${BASH_REMATCH[2]}*${BASH_REMATCH[3]}"
fi
echo "$string"
第一个子模式.*W[[:alpha:]][0-9]+
与P001_WA05
匹配,第二个子模式.*SI_GA_[[:alpha:]]+[0-9]_
与SI_GA_A5_
匹配,依此类推。
然后,您可以将这些子字符串与替换字符串连接起来:“ *
”。
希望这会有所帮助。