shell sed - 在已知字符串和通用分隔符之间替换未知字符串

时间:2014-02-26 23:32:18

标签: regex bash shell sed

好的,所以我知道有一篇类似的帖子我已经提到但是不符合我的确切问题。

供参考:replace a unknown string between two known strings with sed

我有一个软件=设置:值,设置2:值,设置3:值等的文件...

我的第一次尝试是使用上面的参考 sed -i“/ software / s / setting:。*,/ setting:,/”$ fileName

但是,通配符引用该行的最后一个逗号,而不是匹配后的逗号。

我目前的工作是: sed -i“/ software / s / setting:[^,] *,/ setting:,/”$ fileName 但这限制了具有包含在引号内的逗号的潜在值的能力,等...我知道这是一个不太可能的场景,但我希望有一个理想的解决方案,其中值可以包含它想要的任何字符,只是在“setting:”和紧跟在值之后的逗号之间进行字符串替换那个特殊的环境。

感谢任何帮助。提前谢谢!

2 个答案:

答案 0 :(得分:2)

这适用于值中的一个或没有引用的部分(引用部分之前和之后的未引用部分):

sed -i '/software/ s/setting:[^,"]*("[^"]*")?[^,"]*,/setting:,/' $fileName

答案 1 :(得分:0)

echo 'software=setting:"value1,value2",setting2:value,setting3:value'|sed -E '/software/ s/setting:("[^"]*"|[^,"]*),/setting:,/'

这与OSX上的sed有关,gnu sed的选项略有不同。