如何用正则实现特定文本查找替换?sed修改-sav后目标内容
问题描述
现有一段Bash代码,原本用于替换-sav与.test之间的内容:
test="-val https://www.randomurl.com -sav 1aFAd381cCCb86FD300e7a3A399a6014.test -speed 2 -save -delay 14" test=$(sed 's/-sav *.*\./-sav 12345./g' <<< $test) echo $test # 当前输出:-val https://www.randomurl.com -sav 12345.test -speed 2 -save -delay 14
现在需要调整逻辑,将-sav后到-speed前的全部内容替换为12345.itWorks,期望最终变量值为:
test="-val https://www.randomurl.com -sav 12345.itWorks -speed 2 -save -delay 14"
解决方案
修改sed的正则匹配规则,精准选中-sav之后到下一个参数(以-开头)之前的内容,替换为目标字符串即可:
修改后的完整代码
test="-val https://www.randomurl.com -sav 1aFAd381cCCb86FD300e7a3A399a6014.test -speed 2 -save -delay 14" # 匹配-sav后的非空格内容,替换为指定字符串 test=$(sed 's/-sav *[^ ]*/-sav 12345.itWorks/g' <<< "$test") echo "$test"
输出结果
-val https://www.randomurl.com -sav 12345.itWorks -speed 2 -save -delay 14
正则说明
-sav *:匹配-sav和后面的任意空格[^ ]*:匹配任意非空格字符(也就是-sav对应的参数值部分)- 整个正则会选中
-sav及其后的参数值,替换为-sav 12345.itWorks
内容的提问来源于stack exchange,提问作者Sstack324
相关产品推荐
相关产品推荐

