sed escaping: одинарные кавычки для xpath - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь заменить одинарные кавычки на sed при подготовке фрагмента XML для разбора xpath с помощью xmllint.В соответствии со спецификацией xpath я должен заменить ' на ', а " на ".Вот выражения sed, которые я настроил для этого:

sed "s/'/\'/g" | sed "s/\"/\"/g"

Я знаю, что символ & относится к исходному совпадению, поэтому я избежал этого, нопо некоторым причинам они, кажется, не работают.Единая кавычка все еще не экранируется при вводе в xmllint.Сокращенный пример:

XPath error : Invalid predicate /rss/channel/item[title='...Jeanne d'Arc...']/description ^ XPath evaluation failure

Следующее, что я попробовал, было двойное побег безрезультатно.Но что интересно, тройной побег добавил выражение замены, не удаляя начальную кавычку!Я не понимаю, что здесь происходит:

sed "s/'/\\\'/g" | sed "s/\"/\\\"/g"

XPath error : Invalid predicate /rss/channel/item[title='...Jeanne d'apos;Arc...']/description<br> ^ XPath evaluation failure

Может ли кто-нибудь объяснить, что здесь происходит и как добиться правильной замены?

1 Ответ

0 голосов
/ 28 октября 2018

попробовать:

sed "s:':\&apos;:g"|sed 's:":\&quot;:g'
  1. нужен только экранирующий символ & , и если вы поместите выражение sed в двойные кавычки и нужно заменить двойные кавычки, вы должны избежать его тоже, в противном случае используйте для этого одинарную кавычку.
  2. и то же самое, если вы положили выражение sed в одинарные кавычки и нуждаетесь замените одинарную кавычку, вам тоже нужно ее избежать, в противном случае используйте двойную цитата для этого.
...