Комментируйте строки XML, начинающиеся с определенной строки, используя perl -p -ie - PullRequest
1 голос
/ 31 января 2012

Как я могу искать строки, начинающиеся с определенной строки в файле XML, и комментировать их, используя perl -pi -e 's / string / replace / g' / path / file ?Я знаю, как использовать его для базовой замены текста, но я не знаю, как это сделать.

В частности, я хочу закомментировать все теневые линии:

<button function="close" state="prelight" draw_ops="close_focused_prelight"/>
<button function="close" state="pressed" draw_ops="close_focused_pressed"/>
<shadow radius="8.0" opacity="0.75" color="#abde4f" x_offset="1" y_offset="4"/>
<padding left="7" right="7" bottom="7"/>

до

<button function="close" state="prelight" draw_ops="close_focused_prelight"/>
<button function="close" state="pressed" draw_ops="close_focused_pressed"/>
<!--    <shadow radius="8.0" opacity="0.75" color="#abde4f" x_offset="1" y_offset="4"/> -->
<padding left="7" right="7" bottom="7"/>

Ответы [ 3 ]

0 голосов
/ 31 января 2012
s/(<shadow .*?\/>)/<!-- $1 -->/

?указывает на не жадное совпадение для захвата любых символов вплоть до '/>', что должно соответствовать элементу shadow, даже если это не единственный элемент в строке.

Я забыл, что вы делали это накомандная строка.Я только что подтвердил это с помощью вашего тестового ввода.

perl -pi -e "s/(<shadow .*?\/>)/<\!-- \$1 -->/" /tmp/t
0 голосов
/ 31 января 2012

Perl oneliner имеет небольшую разницу в использовании между терминалами Прочтите это для получения дополнительной информации Почему мой Perl однострочный не работает в Windows?

Люди будут считать, что вы работаете с linux / unix по умолчанию, если вы не указали ОС.

Для окон использовать perl -pi.bak -e "s/(^<shadow .*>)/<!-- $1 -->/" theme.xml

Для Linux perl -pi -e 's/(^<shadow .*>)/<!-- $1 -->/' theme.xml

0 голосов
/ 31 января 2012
s/^(<shadow .*)/<!-- $1 -->/mg;
...