2017-02-07 26 views
-2

我試圖查找和替換script.The現有的字符串的正則表達式會像如何在Linux中查找和替換正則表達式模式?

Input Sample : abc,c,efh,hj35,"2,6ag=a193",02_TG,",,,,10,,f,,",gf,g,f,,"1720a5",Thgf"18,dhg;_,2,53",0,hg,cj,cj 
    Expected Output : abc,c,efh,hj35,"-",02_TG,"-",gf,g,f,,"-",Thgf"-",0,hg,cj,cj 

和我一樣替換字符串「 - 」我已經嘗試的代碼是

sed -e 's/".*"/"-"/g filename 

但它不工作!

+1

你想'的sed的/,/ -/g''呢? –

+1

您的預期產出是多少?只有','需要改爲'-'? – Inian

+1

http://importblogkit.com/2015/07/does-not-work/ – Biffen

回答

0

使用perl:

perl -api -e 's/"[^"]*"/"-"/g' filename 
+1

酷與** Perl ** –

+0

@Toto謝謝。工作。@ K-5謝謝 –

+0

@PrudhviPrasanth:不客氣,很高興幫助。隨時將答案標記爲已接受,請參閱:http://stackoverflow.com/help/someone-answers – Toto

0

如果您只想匹配一個字符,您不應該使用*星號,因爲它很貪婪並且匹配的數量儘可能多。

所以你只需要s/,/-/就是這樣。

但如果你想和後,你必須之前保留任何東西,那麼你可以將它們存儲在比賽組括號,然後反向引用它們,就像這樣:

s/(.*?),(.*?)/\1-\2/
或在某些搜索引擎
s/(.*?),(.*?)/$1-$2/


備註
大多數sed實現不支持非貪婪(.*?)。您可以切換到Perl的支持它


爲您更新
intput
abc,c,efh,hj35,"2,6ag=a193",02_TG,",,,,10,,f,,",gf,g,f,,"1720a5",Thgf"18,dhg;_,2,53",0,hg,cj,cj

perl -pe 's/".*?"/"-"/g' your-file

輸出
abc,c,efh,hj35,"-",02_TG,"-",gf,g,f,,"-",Thgf"-",0,hg,cj,cj

prove

+0

大多數'sed'實現不支持非貪婪的'(。*?)'。您可以切換到支持它的Perl,但這仍然不完全健壯,例如CSV格式的數據在逗號內用逗號分隔。 – tripleee

+0

@tripleee,謝謝。你是對的。這個問題沒有具體的目的,所以我寫了一般。然後,如果問的問題''''等等,那麼我的答案將是不同的答案。 –

+0

@ k-five可能是我錯誤的交流了自己.apologies的,但我必須匹配雙引號之間的所有字符。謝謝 –

相關問題