лучше использовать команды perl или unix для разбора этой строки - PullRequest
0 голосов
/ 20 апреля 2011

Есть ли хороший unix one liner или perl liner, который может форматировать эту строку из:

<?xml version="1.0" encoding="UTF-8"?><org.apache.Summary length="200429142" fileCount="197184" dirCount="50" quota="-1" spaceUsed="601287428" spaceQuota="-1"/>

To:

length=200429142
filecount=197184
dirCount=50
quota=-1
spaceUsed=601287428
spaceQuota=-1

Ответы [ 5 ]

6 голосов
/ 20 апреля 2011

Вот одна строка, разбитая на отдельные строки для ясности:

perl -MXML::Simple -l \
    -e '$a = XMLin shift; print "$_=$a->{$_}" for ' \
    -e 'qw(length fileCount dirCount quota spaceUsed spaceQuota)' \
    (your XML string here)

Для этого требуется, чтобы у вас был установлен модуль XML::Simple.

3 голосов
/ 20 апреля 2011

Просто быстрый выстрел: как насчет этого?

sed -r 's/.*<org.apache.Summary\s+([^>]+)>/\1/' | tr " " "\n"
2 голосов
/ 20 апреля 2011
 sed -e 's/.*Summary //;s/\/.*$//' temp|perl -p -e 's/ /\n/g'

length="200429142"
fileCount="197184"
dirCount="50"
quota="-1"
spaceUsed="601287428"
spaceQuota="-1"

если вы хотите сделать на месте:

sed -e 's/.*Summary //;s/\/.*$//' temp|perl -pi -e 's/ /\n/g'

если вам не нужно ", тогда:

 sed -e 's/.*Summary //;s/\/.*$//' temp|perl -p -e 's/ /\n/g;s/\"//g'
length=200429142
fileCount=197184
dirCount=50
quota=-1
spaceUsed=601287428
spaceQuota=-1
1 голос
/ 20 апреля 2011

Уточненная версия на основе @bmk

sed -r 's/<\?.?*\?>//' | sed -r 's/<[a-z\.]+//I' | \
sed -r 's/\/>//' | sed -r 's/ ([a-z]+)="(-?[0-9]+)"/\1=\2\n/Ig'

Всего 4 sed.

  1. удалить <?xml?>
  2. удалить <org.apache.Summary
  3. удалить />
  4. извлечь атрибуты XML в пары.
0 голосов
/ 14 июля 2012

Это должно делать то, что вам нужно.

perl -0777 -E'given(<>){/\?>/g; say "$1$2" while /(\w+=)"(.*?)"/g}' myfile.xml

вывод

length=200429142
fileCount=197184
dirCount=50
quota=-1
spaceUsed=601287428
spaceQuota=-1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...