通过bash在文件中搜索字符串,但只能匹配

时间:2019-06-12 14:14:16

标签: linux string bash file search

根据文件中的子字符串名称找到唯一的字符串名称。

使用的命令:

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 个答案:

答案 0 :(得分:2)

似乎您对xml元素的docBase属性感兴趣。特别是那些值字符串包含“当前”作为子字符串的对象。

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