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

标签 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

最佳答案

看来,您对 xml 元素的 docBase 属性感兴趣。特别是那些值字符串包含“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

关于linux - 通过 bash 在文件中搜索字符串,但只能匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56564290/

相关文章:

c - 如何在 C 中实现具有 ssh 功能的控制台?

java - 如何在 Java 中导出字符串中空格之间的数字?

linux - nfs mount shell 脚本中需要一元运算符

linux - 如何打印文件在另一个目录的所有目录中重复的次数#bash

linux - 内部服务器错误

linux命令ram类型

linux - 如何在 CentOS 6.6 版本中启用 su 日志记录

c++ - 使用 fopen 读取 C++ 中的文本文件,无需换行转换

string - Bash:完全像 Readline 一样拆分字符串

bash - rsync - 排除除子目录之外的所有内容,但排除子子目录