Удалить объявление xml из данных xml, используя perl или awk

Наше приложение находится на приемной стороне для проведения ретро-анализа данных XML. Наше приложение не имеет Java или.NET, но работает в Unix, поэтому у него есть awk и Perl.

XML-сообщения в файле содержат:

<?xml version="1.0" encoding="ISO-8859-1" ?> 

Я попробовал несколько вариантов в Perl и awk, чтобы удалить их, но не смог заставить их работать:

perl -p -i -e "s/<?xml version="1.0" encoding="ISO-8859-1" ?>//g"  inputFile
perl -p -i -e "s/<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>//g"  inputFile
perl -p -i -e "s/<\?xml version="1.0" encoding="ISO-8859-1" \?>//g"  inputFile

Любой другой вариант сделать это с помощью PERL или AWK?

2 ответа

Решение

Это сработало для меня без перезаписи файла данных:

perl -p -e 's/<\?xml version="1.0" encoding="ISO-8859-1" \?>//g'

Я бы только перезаписал файл (-i) когда я был уверен, что базовое регулярное выражение работает без ущерба.

Вам не нужно сопоставлять всю строку, если ваш файл XML. <?xml version достаточно.

Пытаться:

sed -i '/<\?xml version/d' file

тестовое задание

kent$  echo '<?xml version="1.0" encoding="ISO-8859-1" ?> 
foo
bar
xyz
hello
there'|sed '/<\?xml version/d' 
foo
bar
xyz
hello
there
Другие вопросы по тегам