2014-05-19 77 views
0

我有包含這些行的文件:在一個文件中的數字使用SED後追加字符串

John 
Some String 1234 
Mary 
another string 3445 
Tom 
Cat Dog 2367 

即每個交替行與數結束,並且沒有數其他地方。 我想剛剛的號碼後加</BR>標記,以便輸出是這樣的:

John 
Some String 1234</br> 
Mary 
another string 3445</br> 
... 

我試圖用sed命令爲:

sed -i 's/[0-9]+/1<\/br>/' filename.html 

,但它的錯誤了。 我該怎麼做?

+0

(1)如果使用'+','告訴給sed'使用擴展RE。 (2)利用捕獲組和反向引用。 (3)您可能還想閱讀RE中的錨點。祝你好運。 – devnull

回答

2

使用此之一:

sed 's/\([0-9]\+\)$/\1<br\/>/' your.txt 

簡短說明:在所述線路的$

編號與各種長度[0-9]\+被匹配到匹配組\(... \)。它將被匹配組\1加上<br\/>標記的值替換。不要錯過我已經用反斜槓\逃脫了幾個字符,因爲它們在模式中有特殊的含義。

+0

你的命令應該是'sed's/\([0-9] \ + \)$/\ 1 <\/br>/g'文件' –

+0

@AvinashRaj爲什麼?在行尾可以只有一個數字* – hek2mgl

+0

op想'
'不'
' –

3

您可以使用:

sed -i.bak 's~[0-9]\+$~&</br>~' file 

現在文件內容將是:

cat file 

John 
Some String 1234</br> 
Mary 
another string 3445</br> 
Tom 
Cat Dog 2367</br> 
0

明白了,我周圍是否缺少匹配的模式()

因此,它是這樣的:

sed -i 's/\([0-9][0-9]*\)/\L\1<\/br>/I' filename.html 
+0

爲什麼你使用'\ L'? –

+0

爲什麼要結束與我的命令?爲什麼將RE分組而不是用&引用它?爲什麼從RE +切換到RERE *表示而不是添加-r?看到@ anubhava的答案是正確的做法。 –

2

試試這個:

sed -ri.bak '/[0-9]+$/ s/$/<\/br>/g' filename.html 
+2

'g'告訴sed在線上每次出現RE時都會進行替換,但是您在線的末尾進行匹配,因此線上只能出現1次出現,所以'g'完全不起作用。 –

相關問題