2016-01-20 67 views
2

只有連字符後面跟2位以上的字符,才能刪除連字符?只有連字符跟在2位以上時,才能刪除連字符之間的連字符

輸入:

101|9881|Customer contact on 12-01-2015|AXD 

102|9882|Declined sales. 122-333-1234 contact|XYZ 

輸出:

101|9881|Customer contact on 12-01-2015|AXD 

102|9882|Declined sales. 1223331234 contact|XYZ 

我已經使用這個......

sed 's/([0-9])-([0-9])/\1\2/g' inputfile 

,但它所有的複姓數字替換連字符。

請幫忙嗎?

+0

爲什麼不應該'12-01-2015'轉換爲'12-012015'?第二個連字符後跟2個以上的數字。掛斷 - 你的主題說'連字符超過2位數字',但你的文字說'連字符後面跟着超過2位數字'。你要哪個?或者它或者兩者兼而有之? –

+0

基本上它背後的想法是保持日期原樣,並結合日期以外的其他數字。 – Syeda

+0

然後,該方法應該簡單地從任何與日期正則表達式不匹配的數字和連字符串中移除連字符,例如,在awk中它會是'/ [0-9 - ] +/&&!/ [0-9] {2} - [0-9] {2} - [0-9] {4} /'。無論如何,看起來你有一個你很滿意的答案... –

回答

2

您必須指定「大於二」:

$ sed 's/\([0-9]\{3,\}\)-/\1/g' <<< '101|9881|Customer contact on 12-01-2015|AXD 
> 102|9882|Declined sales. 122-333-1234 contact|XYZ' 
101|9881|Customer contact on 12-01-2015|AXD 
102|9882|Declined sales. 1223331234 contact|XYZ 

在基本正則表達式(不帶選項的sed什麼GNU一樣),()匹配字面括號,你必須逃脫他們的捕獲組。量詞附近的括號相同:\{3,\}是「三個或更多」。

如果您的sed支持它(爲GNU sed的:-r選項),您可以使用擴展的正則表達式,從而簡化了命令

sed -r 's/([0-9]{3,})-/\1/g'