如何在xml文件中查找和替换内容

问题描述 投票:1回答:2

试图在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"?>
shell replace xmlhttprequest find
2个回答
0
投票

在您的情况下使用以下perl one-liner可能很有用:

perl -pi -w -e 's/search_string/replace_string/g;' a_file

0
投票

尝试以下,它没有任何问题

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
© www.soinside.com 2019 - 2024. All rights reserved.