2012-09-18 68 views
0

我在sed中使用以下命令:sed s/1[^\.]/2/g testsed正則表達式替換太多字符?

我想用一個2替換每個1,除了後面跟一個點。它工作正常。

但在我的文件中,我有一個{{1e}}被替換爲{{2}}

爲什麼sed刪除e? PS:我是一個正則表達式的初學者,所以它可能是一個明顯的錯誤。

+2

取代它,我認爲SED將其解釋爲「替換以下2個字符爲‘2’。(1後面有比其他任何字母」。「)。我是初學者,以及,所以不太清楚實際的修正是什麼 –

+0

你的正則表達式匹配兩個字符,第一個是「1」,第二個是whatevere,而不是「。」;你應該在「1」之後使用捕獲子模式並將其包含在替換模式中。 – Lauri

回答

3

捕捉1之後的字符和2後重新插入:

sed 's/1\([^.]\)/2\1/g' test 

唯一的問題是1在行的末尾。您可以通過2

s/1$/2/ 
+0

Thx for your help!我在行尾沒有1,所以它不會成爲問題:) –

+0

'sed's/1 \([^。] \ | $ \)/ 2 \ 1/g'測試'也會迎合線條結束的條件。注意:我不認爲'.'需要在角色類中進行反斜槓處理。 – potong

+0

@potong:良好的捕捉。稍有更新。 – choroba