Как вывести конкретное слово в файл, если оно присутствует?

241
monster

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

grep "<active>false" settings.xml

grep "<active>true" settings.xml

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

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

0
Удалите лишнее, отфильтровав вывод с помощью sed: `grep"false "settings.xml | sed -e 's /// '' xenoid 5 лет назад 1
Это файл XML? uzsolt 5 лет назад 0
да, это XML-файл monster 5 лет назад 0
В этом случае вы должны использовать любой XML-инструмент, потому что sed / grep / .. ориентированы на строки - например, xmllint, xmlstarlet (http://xmlsoft.org/xmllint.html или http://xmlstar.sourceforge.net/ ). Кто гарантирует, что`и` true` находятся в одной строке? uzsolt 5 лет назад 3

1 ответ на вопрос

1
slhck

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

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

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

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

Похожие вопросы