2013-03-11 206 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