как найти и заменить содержимое в XML-файле - PullRequest
0 голосов
/ 13 февраля 2019

Пытаясь найти и заменить содержимое в 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 ........ пока .. .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"?>

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Попробовал ниже и все работало без проблем

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
0 голосов
/ 13 февраля 2019

Использование нижеприведенного однострочного perl может быть полезно в вашем случае:

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