2013-03-11 181 views
0

我在文件的第三行有<host></host>。我想用<host>my_dB</host>替換它。如何使用sed來做到這一點。我想在第4,5和6行做這樣的替換。替換線的範圍

<host></host> 
<host>my_dB</host> 
+1

標題索要線'3-6'進行修改,但問題只要求'3-5'?應該清楚如何改變給定答案的範圍。 – 2013-03-11 10:18:12

+0

我忘記指定6。原諒我..蘇爾簡短明瞭,謝謝 – Linda 2013-03-11 10:28:50

回答

1

每個人都可以用類似於這樣做:

sed -i "s/<host><\/host>/<host>my_db<\/host>/" foo.txt 

-i意味着它會覆蓋就地文件。刪除該標誌以將更改寫入標準輸出。

如果這是一個常規任務來填寫文件的詳細信息,請考慮在文件中添加錨以使其更容易。例如:

<host>DB_HOST</host> 

然後sed的將只是需要:

sed -i 's/DB_HOST/my_db/' 
+0

我正在使用-i選項,謝謝你.. – Linda 2013-03-11 10:14:56

0

試試這個:

sed -r '3,5s#(<host>)(</host>)#\1my_dB\2#' file 
+0

我得到CMD失敗。 '\\''sed -r'\\''3,5s#()()#\ 001my_dB \ 002#'\\'' – Linda 2013-03-11 10:10:32

+0

@Kate那些'\\\\'???和'001,002'? – Kent 2013-03-11 10:13:01

+0

@ Kent - tats wat我得到好友...無論如何,我的問題解決了。謝謝 – Linda 2013-03-11 10:16:26

1

要與<host>my_dB</host>替換的<host></host>所有實例文件,運行:

sed 's|<host></host>|<host>my_dB</host>|g' file 
+0

哇,它的工作,tats不同的方式思考..謝謝你,感謝很多 – Linda 2013-03-11 10:11:03

+0

@ kate這會做替換的每一行不只是第3至第6行。 – 2013-03-11 10:37:37

+0

@@ sudo_O - 幸運的是標籤名稱是不重複。 DBname,host,userName,password .. – Linda 2013-03-11 12:28:01

4

像這樣:

$ sed '3,6 s/<host>/<host>my_dB/' file 

演示:

$ cat file 
1: <host></host> 
2: <host></host> 
3: <host></host> 
4: <host></host> 
5: <host></host> 
6: <host></host> 
7: <host></host> 

$ sed '3,6 s/<host>/<host>my_dB/' file 
1: <host></host> 
2: <host></host> 
3: <host>my_dB</host> 
4: <host>my_dB</host> 
5: <host>my_dB</host> 
6: <host>my_dB</host> 

7:

保存變更回原來的文件然而,你真的應該使用XML解析器使用-i選項

$ sed -i '3,6 s/<host>/<host>my_bd/' file 

。深入分析XML與regexp是一個壞主意。

+1

's!my_bd!my_dB!g' – Johnsyweb 2013-03-11 10:11:02

+0

@@ sudo_O ---我正在運行一個上限任務來執行此操作..Dnt認爲我可以在那裏使用XML解析器... – Linda 2013-03-11 10:13:20

+0

I不是什麼'帽子任務'是?在這種情況下,使用'sed'修改文件可能是一個快速修復,但通常如果您需要編輯'XML',您應該使用解析器而不是正則表達式。 – 2013-03-11 10:16:29