试图在xml文件中查找和替换内容
我正在针对各种主机运行nmap并为每次运行获取xml输出(这发生在管道中)我正在将每次运行的xml文件合并为一个合并的xml
以上是仅提供背景..
我的实际问题是:
我想替换合并的xml文件中的一些内容
我尝试了sed -i -e但它只适用于第三行,我试图更改链接,但第二行不起作用,可能是由于行中的空格
我有test.xml文件,我需要在其中替换一些内容
<?xml version="1.0"?>
<!DOCTYPE nmaprun PUBLIC "-//IDN nmap.org//DTD Nmap XML 1.04//EN" "https://svn.nmap.org/nmap/docs/nmap.dtd">
<?xml-stylesheet href="https://svn.nmap.org/nmap/docs/nmap.xsl" type="text/xsl"?>
在第二行我想删除nmaprun后的内容(删除'PUBLIC ........直到... .dtd“)>应该留下
更换后应该是这样的
<!DOCTYPE nmaprun>
第三行我想用https://svn.nmap.org/nmap/docs/nmap.xsl
取代file:///usr/local/bin/../share/nmap/nmap.xsl
更换后应显示为
<?xml-stylesheet href="file:///usr/local/bin/../share/nmap/nmap.xsl" type="text/xsl"?>
在两行替换后,它应显示为
<?xml version="1.0"?>
<!DOCTYPE nmaprun>
<?xml-stylesheet href="file:///usr/local/bin/../share/nmap/nmap.xsl" type="text/xsl"?>
在您的情况下使用以下perl one-liner可能很有用:
perl -pi -w -e 's/search_string/replace_string/g;' a_file
尝试以下,它没有任何问题
sed -i s~https://svn.nmap.org/nmap/docs/nmap.xsl~file:///usr/bin/../share/nmap/nmap.xsl~g' nmap_merge.xml
sed -i 's~!DOCTYPE nmaprun PUBLIC "-//IDN nmap.org//DTD Nmap XML 1.04//EN" "https://svn.nmap.org/nmap/docs/nmap.dtd"~!DOCTYPE nmaprun~g' nmap_merge.xml