【问题标题】:Search string in file via bash but only work match通过 bash 在文件中搜索字符串,但只能匹配
【发布时间】:2019-10-27 02:11:27
【问题描述】:

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

使用的命令:

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

【问题讨论】:

标签: linux string bash file search


【解决方案1】:

看来,您对 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多