Я делаю простой скрипт, где я превращаю true в false если в файле присутствует true или наоборот, если в файле присутствует false , подробности здесь. Теперь я хочу вывести, каково значение после изменения, то есть, если я изменил значение false на true он должен вывести true . Прямо сейчас я использую два утверждения -

grep "<active>false" settings.xml

grep "<active>true" settings.xml

Но он печатает <active> с выводом (как и ожидалось), но есть ли лучший способ сделать это?

Примечание: я использую <active>true в grep потому что мое регулярное выражение имеет тип <active>([a-z]*)</active>

1 ответ1

1

Если вы используете GNU grep , вы можете использовать регулярные выражения Perl с положительным взглядом за утверждением:

grep -Po "(?<=<active>)(false|true)" settings.xml

Это выведет только false или true . <active> будет сопоставлено, когда за ним следует true или false , но оно не будет включено в вывод.

Но в идеале вы должны использовать синтаксический анализатор на основе XML, как это предлагается в комментарии uzsolt.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .