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