在一系列线上替换

时间:2013-03-11 10:03:52

标签: linux sed

我在文件的第3行有<host></host>。我想用<host>my_dB</host>替换它。如何使用sed执行此操作。我想在第4,5和6行做这样的替换。

<host></host>
<host>my_dB</host>

4 个答案:

答案 0 :(得分: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:

要将更改存储回文件,请使用-i选项

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

但是你真的应该使用XML解析器。使用regexp进行XML解析确实是一个坏主意。

答案 1 :(得分:1)

要将<host></host>的所有实例替换为文件中的<host>my_dB</host>,请运行:

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

答案 2 :(得分:1)

每个都可以用类似的东西来完成:

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

-i表示它会就地覆盖文件。删除该标志以将更改写入stdout。

如果这是用于填写文件详细信息的常规任务,请考虑向文件添加锚点以使其更容易。例如:

<host>DB_HOST</host>

然后sed只需要:

sed -i 's/DB_HOST/my_db/'

答案 3 :(得分:0)

试试这个:

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