【问题标题】:how to find and replace content in an xml file如何查找和替换 xml 文件中的内容
【发布时间】:2019-07-07 13:45:53
【问题描述】:

试图查找和替换 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 (Remove ' PUBLIC........ until .. .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"?>

【问题讨论】:

  • 您可以在 sed 中使用 # 而不是 / 来避免转义实际的 '/'。
  • 我试过了~,+,#,它适用于第三行(我猜是因为内容中没有空格要替换)。它不适用于有空格的第二行。有没有办法逃离空间? (我的意思是如果这是这里的问题)
  • 是的,您可以使用 \ 转义空格

标签: shell replace xmlhttprequest find


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在您的情况下,使用下面的 perl 单行可能有用:

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

    【讨论】:

      猜你喜欢
      • 2012-09-08
      • 2014-08-17
      • 1970-01-01
      • 2021-11-06
      • 2019-10-16
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      相关资源
      最近更新 更多