2009-10-31 36 views

回答

3

因爲'。'是一個匹配任何字符的正則表達式。你想要's/\.//'

7

點是一個特殊的字符意思是「匹配任何字符」。

$ sed s/\\.// temp 
225 

你會認爲,你可以做sed s/\.// temp,但你的shell會逃脫單反斜線,並通過s/.//到sed的。所以,你需要把兩個反斜槓傳遞一個反斜槓到sed的,這將適當將\.視爲文字點。或者,你可以引述命令保留反斜線:

$ sed "s/\.//" temp 
225 

你得到2.5當你做s/.//是該點的第一個字符相匹配的文件中並刪除它的原因。

+0

+1 - 也指出先生! – Buggabill 2009-10-31 16:49:38

0

'。''是特別的:它匹配任何單個字符。所以在你的情況下,sed表達式匹配行中的第一個字符。試着逃離這樣的:

小號/\.//

+0

它看起來並不像你在這裏逃脫。 – Telemachus 2009-10-31 16:43:58

+0

Heh。看起來編輯小部件吃反斜槓。我需要逃避逃生,讓它出現:) – Ned 2009-10-31 17:12:21

1

.爲任何字符通配符,所以第一個字符是什麼代替,那麼sed的完成。

你想要sed 's/\.//' Temp。反斜槓用於轉義特殊字符,以便重新獲得其面值。

0

你也可以用awk

awk '{sub(".","")}1' temp