Perl Командная строка - perl -pi -e - PullRequest
1 голос
/ 22 марта 2012

Я пытаюсь найти и заменить строку в XML-документе

Это код, который я использую:

perl -pi -e s/xmlNamespaceAware=\"false\"">"/xmlNamespaceAware=\"false\"">""<"Alias">"hostname"<"/Alias">"/g

Ошибка:

syntax error at -e line 1, near "s/xmlNamespaceAware="false">/xmlNamespaceAware="false"><Alias>webtctdm1.ecorp.cat.com</Alias"

Если я удаляю / в, он работает нормально.

Также есть ли возможность в любом случае написать "<"Alias">"hostname"<"/Alias">" на новой строке напротив той же строки, что и xmlNamespaceAware="false">

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 22 марта 2012

Вы можете использовать escape-символ \K для удобства.Это сохранит предыдущую строку, так же, как утверждение для обзора.Я также использую # в качестве разделителя регулярных выражений подстановки, чтобы избежать экранирования.

4 голосов
/ 22 марта 2012

Сделайте свою жизнь проще и выберите разделитель, отличный от /, при работе с HTML / XML.

С литералом новой строки:

perl -pi -e '
s{xmlNamespaceAware="false">}
{xmlNamespaceAware="false">
<Alias>hostname</Alias>}g' *.xml

С escape-символом новой строки:

perl -pi -e '
s{xmlNamespaceAware="false">}
{xmlNamespaceAware="false">\n<Alias>hostname</Alias>}g' *.xml

Оба делают то же самое.

2 голосов
/ 22 марта 2012

Это безнадежный беспорядок.Вы забыли убежать от ", у вас есть / в </Alias>, который фактически завершает регулярное выражение.Почему бы просто не использовать строку в одинарных кавычках для хранения всего этого?

perl -pi -e 's/xmlNamespaceAware="false">/xmlNamespaceAware="false"><Alias>hostname<\/Alias>/g'
0 голосов
/ 22 марта 2012

Я думаю, что это должно сделать это для вас, но у меня нет Linux-бокса, чтобы попробовать это.Использование pipe в качестве разделителя для s/// исключает необходимость экранирования от косой черты.

perl -pi -e 's|xmlNamespaceAware="false">|xmlNamespaceAware="false">\n<Alias>hostname</Alias>|g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...