2010-10-11 163 views
0

我有一些字符串,在一些文件這種模式:如何使用正則表達式sed命令

  • domain.com/page-10
  • domain.com/page-15 ....

,我想的東西,如

  • domain.com/apple-10.html
  • 來取代它們
  • domain.com/apple-15.html

我發現我可以使用sed命令在同一時間,以取代他們,但因爲之後的數字應該的東西可以添加我想我必須使用正則表達式做到這一點。但我不知道如何。

回答

6
sed -i.bak -r 's/page-([0-9]+)/apple-\1.html/' file 

sed 's/page-\([0-9][0-9]*\)/apple-\1.html/' file > t && mv t file 

此外sed的,你也可以使用GAWK的gensub()

awk '{b=gensub(/page-([0-9]+)/,"apple-\\1.html","g",$0) ;print b }' file 
+0

您沒有看到OP所需的全部內容。 – Amber 2010-10-11 04:52:56

+0

使用GNU Sed擴展 - 可以用標準sed來寫入,用'[0-9] *'替換'+'。 – 2010-10-11 04:55:33

+0

@jonathan,你確定? '*'爲零或更多。 '+'是一個或多個。 ''[0-9] [0-9] *'應該更合適。 – ghostdog74 2010-10-11 04:59:46

5
sed -i 's/page-\([0-9]*\)/apple-\1.html/' <filename> 

([0-9]*)捕獲一組數字;替換字符串中的\1引用了捕獲並將其添加爲替換字符串的一部分。

如果您需要保留文件的副本而不進行替換,或者只是省略-i,而改爲使用I/O重定向方法,則可能需要使用類似-i.backup的內容。

+0

您沒有指定如何使用\ d + – ghostdog74 2010-10-11 04:54:42

+0

感謝,但我運行給出的命令和得到這個錯誤:在'S'命令的RHS – 2010-10-11 05:01:10

+1

那是因爲你無效引用\ 1應該逃避大括號...看到我的第二個答案 – ghostdog74 2010-10-11 05:03:34

0

另一種方式來解決這個問題:

sed -i.bak 's/\(^.*\)\(page-\)\(.*\)/\1apple-\3.html/' Files 

這裏搜索模式存儲和檢索使用引用(\1\2\3)。

-1

這將工作

sed 's/$/\.html/g' file.txt 
+0

sed的/ $/\。html/g'file.txt – 2016-09-22 06:56:00