2014-02-26 35 views
0

好的,所以我知道有一個類似的帖子,我已經提到過,但並不適合我正在遇到的確切問題。shell sed - 替換已知字符串和通用分隔符之間的未知字符串

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

我有軟件=設置文件:值,設置2:值,setting3:值,等...

我第一次嘗試使用上面參考sed -i「/ software/s/setting:。*,/ setting:,/」$ fileName

但是,通配符引用該行的最後一個逗號,而不是緊跟匹配後的逗號。

我目前的解決辦法是: SED -i 「/軟件/ S /設置:[^,] *,/設置:,/」 $文件名但是這限制了有一個包含潛在價值的能力包含在引號內的逗號等等......我知道這是不太可能的情況,但我希望有一個理想的解決方案,其中值可以包含任何字符,並且只需在「設置」和緊跟着特定設置值的逗號。

任何幫助表示讚賞。提前致謝!

+0

所以,你想匹配的一切了第一個逗號是不是裏面一個引用的字符串?報價在哪裏出現?報價在哪裏開始和結束?只是在價值的開始和結束時,還是在中間?它可以開始和結束多次? – Alfe

回答

2

這將在值的一個或無報價部分工作(不帶引號部分之前和引用部分之後):

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

這是在OSX上的sed,gnu sed有略微不同的選項。

相關問題