Удалить или заменить двойные кавычки из значений XML (конкретный поиск и замена) - PullRequest
2 голосов
/ 13 марта 2011

У меня есть следующий XML:

<smtng attr="bla"><desc>bla 12" bla</desc></smtng>

И я хотел бы использовать какую-то команду (желательно исполняемую из bash), чтобы заменить " после 12 на &quot;, но оставить егокак это для attr="bla" части ...

Есть идеи?

Ответы [ 3 ]

1 голос
/ 13 марта 2011

Это может сработать, но вы действительно должны использовать подходящие инструменты.

sed 's|</\?desc>|\n&|g; s/\(<desc>[^"]*\)"\([^\n]*\n\)/\1\&quot;\2/g;s/\n//g' inputfile
1 голос
/ 13 марта 2011
#!/bin/bash

sed -e $'s@<desc>@\\\n<desc>@' -e  $'s@</desc>@</desc>\\\n@' | \
while IFS=$'\n\r' read line; do
  case "${line}" in
    *"<desc>"*)
    sed 's@"@\&quot;@' <<<"${line}"
    ;;

    *)
    echo "${line}"
    ;;
  esac
done

Из-за лени я отредактировал свой предыдущий ответ, чтобы выделить его в отдельной строке

0 голосов
/ 14 марта 2011

Используя xmlstarlet, вы можете сделать следующее:

# cf. http://www.exslt.org/str/index.html
echo '<smtng attr="bla"><desc>bla 12" bla</desc></smtng>'  | 
xmlstarlet sel -T -t -m "//smtng/desc" -v "str:replace(.,'&quot;','&amp;quot;')" -n
...