0

<host></host>在文件的第三行。我想用<host>my_dB</host>. 如何做到这一点sed。我也想在第 4 行、第 5 行和第 6 行进行这样的替换。

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

4 回答 4

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 解析器。开始解析 XMLregexp确实是个坏主意。

于 2013-03-11T10:08:06.760 回答
1

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

sed 's|<host></host>|<host>my_dB</host>|g' file
于 2013-03-11T10:07:24.810 回答
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/'
于 2013-03-11T10:08:51.317 回答
0

试试这个:

 sed -r '3,5s#(<host>)(</host>)#\1my_dB\2#' file
于 2013-03-11T10:07:11.630 回答