У меня есть некоторые огромные xml текстовые файлы. Я должен записать сценарий, чтобы найти и распечатать определенный тег только. Я попробовал sed
и grep
но они оба возвращают целую строку.
Используя SunOS 5.x, таким образом, не все команды Linux могут работать. grep -o
не доступно.
'xml' файл не является на самом деле одним огромным xml документом, но каждая строка является отдельным xml документом, со всего несколькими тегами, даже не вложенными. И структура довольно легка, таким образом, полные xml синтаксические анализаторы не нужны, и вероятно не работали бы.
Я искал sed
, awk
, или некоторый другой, лайнеры, но не мог заставить их работать, и они оба относительно плохо мне знакомы.
Необходимо использовать инструмент, которым это сделано для парсинга XML-файлов, однако вот пример того, как Вы могли бы выполнить в этом sed
:
Учитывая простую строку как <foo>bar</foo><baz>qux</baz>
и Вы хотите значение "панель", можно сделать это:
sed -e 's|.*<foo>\([^<]*\)</foo>.*|\1|' inputfile
Используйте 'xml sel' команда xmlstarlet: http://xmlstar.sourceforge.net/
Пример:
xml sel -t -c '/xpath/to/my/tag' xmlfile.xml
Остерегайтесь пространства имен по умолчанию в своем XML-файле хотя (читает это). Пример:
xml sel -N x="http://www.mozilla.org/2006/browser/search/" -t -m '//x:Param' -c "." -n /usr/lib/firefox-3.5/searchplugins/google.xml
Я использую xmlstarlet для всех xml задач теперь, главным образом запросы.
$ echo '<a><b>B</b><c>C</c></a>' > file.xml $ perl -ne 'm!<b>(.*)</b>! && print "$1\n"' *.xml B $ perl -ne 'BEGIN{$/="<"}; print "$1\n" if m![bc]>([^<]+)<!' *.xml B C
Но действительно необходимо использовать синтаксический анализатор XML по причинам, которые должны быть (или станет), слишком очевидный.
Две идеи:
установите grep из sunfreeware.com. Это должно получить Вас-o опция, которую Вы знаете из Linux.
запишите жемчуг или сценарий Python, чтобы сделать задание.