Поиск строки в файле с помощью bash, но только рабочее совпадение - PullRequest
1 голос
/ 12 июня 2019

Найти единственное имя строки на основе имени подстроки в файле.

Используемая команда:

cat test.xml | grep -i current | awk -F / '{print $NF}' | tr -d

Что работает:

Содержимое файла:

<Context path="/SomeApi" reloadable="false" docBase="http://some-domain/CURRENT/SomeApi-CURRENT.war"

Выход (желаемый выход):

SomeApi-CURRENT.war

Что не работает:

Содержимое файла:

<Context path="/SomeApi" reloadable="false" docBase="http://some-domain/CURRENT/SomeApi-CURRENT.war" workDir="/U01/someApi/work

Выход:

work className=URLStandardContext unpackWAR=true>

Нужен вывод SomeApi-CURRENT.war

1 Ответ

2 голосов
/ 12 июня 2019

Похоже, вас интересует атрибут docBase ваших элементов xml. В частности те, где строка значения содержит «current» в качестве подстроки.

grep -i current test.xml | grep -o " docBase=\"[^\"]*" | rev | cut -d'/' -f1 | rev

Но это несколько грубое решение. Чтобы гарантировать правильность, необходимо сделать несколько допущений.

Поскольку использование grep и т. Д. Не является идеальным, вы, возможно, захотите проверить xmllint , который является инструментом командной строки для анализа входных данных xml. С XPath команда может выглядеть примерно так:

xmllint --xpath "//Context[contains(translate(@docBase,'CENRTU', 'cenrtu'), 'current')]/@docBase" test.xml | rev | cut -d'/' -f1 | cut -c2- | rev
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...