我<host></host>
在文件的第三行。我想用<host>my_dB</host>
. 如何做到这一点sed
。我也想在第 4 行、第 5 行和第 6 行进行这样的替换。
<host></host>
<host>my_dB</host>
像这样:
$ 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
确实是个坏主意。
<host></host>
要替换文件中的所有with实例<host>my_dB</host>
,请运行:
sed 's|<host></host>|<host>my_dB</host>|g' file
每个都可以用类似的东西来完成:
sed -i "s/<host><\/host>/<host>my_db<\/host>/" foo.txt
这-i
意味着它将就地覆盖文件。删除该标志以将更改写入标准输出。
如果这是为文件填写详细信息的常规任务,请考虑向文件添加锚点以使其更容易。例如:
<host>DB_HOST</host>
那么 sed 只需要:
sed -i 's/DB_HOST/my_db/'
试试这个:
sed -r '3,5s#(<host>)(</host>)#\1my_dB\2#' file