在目录中递归搜索所有 xml 文件中的特定标签并 grep 标签的值

Vic*_*Dev 5 command-line xml find

Ubuntu 14.04 值得信赖的塔尔。

假设我有一个名为“testmag”的目录,它可能包含数百个 xml 文件,而目录又包含许多 xml 文件。我不知道任何 xml 文件的名称,但我知道其中之一包含 tag <dbname>....</dbname>

现在如何找到包含上述标签的文件并将标签的值作为终端中的输出

Val*_* B. 5

这是一个解决方案,find它还将输出包含匹配项的文件的文件名:

find . -name "*.xml" -exec grep '<dbname>' {} \;             \
                     -exec echo -e {}"\n" \;                 \
                     | sed 's/<dbname>\(.*\)<\/dbname>/\1/g'
Run Code Online (Sandbox Code Playgroud)

解释

  1. find . -name "*.xml"从当前目录递归查找所有 xml 文件
  2. -exec grep '<dbname>' {} \;在每个文件上搜索模式<dbname>
  3. -exec echo -e {}"\n" \;echo 文件名 + 新行(-e选项使 echo 解释\n
  4. | sed 's/<dbname>\(.*\)<\/dbname>/\1/g'通过管道输出来sed仅打印<dbname></dbname>标签之间包含的字段。

注意1:您可以格式化输出,echo -e ...以便清楚地列出每个文件的结果,例如通过添加新行或下划线行,无论什么都适合您的需要。

.注意2:每个文件的路径将相对于(例如)给出./subfolder1/file.xml。如果您想要绝对路径,请选择find $PWD -name ....