好的,所以我知道有一篇类似的帖子我已经提到但是不符合我的确切问题。
供参考: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:”和紧跟在值之后的逗号之间进行字符串替换那个特殊的环境。
感谢任何帮助。提前谢谢!
答案 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的选项略有不同。