2014-02-25 101 views
1

使用sed,如何用NULL替換2個或更多個空格?用NULL替換文件中的2個或多個空格

輸入

200 0 0 100  300 400 10 

所需的輸出

200 0 0100300400 10 
+0

'用NULL替換 - 你的意思是'刪除'? –

+1

是的,我的意思是刪除。得到了解決方案埃德。 乾杯。 –

回答

5

你可以使用sed(這是不特定於GNU SED):

sed -r 's/[ ]{2,}//g' filename 

或(無-r):

sed 's/[ ]\{2,\}//g' filename 

您的輸入,這將產生:

200 0 0100300400 10 
+1

沒有必要將空間放在字符列表中,因爲沒有什麼特別的地方。您應該聲明它也是GNU特有的,這樣海報不會浪費時間嘗試調試它,例如他在Solaris上。 –

+1

一個更基本的正則表達式應該是's/* // g' - 兩個空格,後跟零個或多個空格,或者使用通用空格:'s/[[:space:]] [[:space:]] [[ :space:]] * // g' –

+0

@EdMorton(1)這不是GNU-sed特有的,並且可以與其他sed變體一起使用。 (2)我明白一個空間並不是特別的,但我發現在匹配多個空格時可以使用量詞。 – devnull

4
sed 's/ \+//g' INPUTFILE 

就可以了(如果你有GNU SED)。

+1

你應該說明它是GNU特有的。 –

+0

短小而且完美。 :)乾杯。 –

5

這將工作與任何sed的,不只是GNU的sed:

sed -e 's/ *//g' 
0

張貼在這裏作爲參考,一個awk解決方案:

$ echo '200 0 0 100  300 400 10' | awk '{gsub(/ +/,"")}1' 
200 0 0100300400 10 
+0

由於awk使用EREs,gsub()可以是'gsub(/ + /,「」)''。 –

+1

哎呀,你是對的,你保存了一個角色。謝謝@EdMorton。更新了答案。':)' –

+0

這可能不是問題,但發佈的腳本也會刪除空白行。 ''{gsub(/ + /,「」)} 1''會更安全。當然,現在我們又失去了那些已保存的角色:-)。 –

0

純猛砸。在腳本中,你可以使用參數替代:

str="200 0 0 100  300 400 10" 

shopt -s extglob 

str=${str// +()/} 
echo "$str" 

200 0 0100300400 10 

取代${str// +()/}刪除所有的空格,後面至少一個空白。

相關問題