如何搜索xml文件,条件是文件名在文件

时间:2018-01-17 16:24:33

标签: xml linux bash awk find

如何搜索xml文件,条件是文件名在文件中

第一项任务

所以首先用xml类型搜索文件:

find /tmp -name '*.xml'

/tmp/Prepare_file_Env.xml

第二项任务

第二部分是查找文件名 - Prepare_file_Env字在文件内 - Prepare_file_Env.xml

所以我做了这个

示例:

grep -cq Prepare_file_Env Prepare_file_Env.xml ; [[ $? -eq 0 ]] && echo $FileName

我的问题 - 如何在一个查找语法中结合两个任务

请求查找的语法......或任何其他解决方案......

find /tmp -name '*.xml' -exec ............

xml文件的示例 - Prepare_file_Env.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Component configuration file -->
<Component>
   <Name>Prepare_file_Env</Name>

查找CLI的预期结果,基于XML文件示例

/tmp/Prepare_file_Env.xml

2 个答案:

答案 0 :(得分:1)

 $ find . -type f -name '*.xml' -exec grep -o -P '(?<=<Name>).*(?=</Name>)' {} \;
 Prepare_file_Env

总结:

grep -o -P使用特殊Perl类型的正则表达式匹配,并获取<Name> </Name>找到的xml文件之间的单词find

答案 1 :(得分:0)

$ find /tmp -name '*\.xml' -print0 | \
  xargs -0 sh -c 'grep -l `sed "s:^.*/::;s:.xml *$::"<<<"$@"` "$@"' echo

/tmp/Prepare_file_Env.xml
  1. sed "s:^.*/::;s:.xml *$::"<<<"$@":获取没有.xml
  2. 的基本文件名
  3. grep -l:如果找到字符串,则打印文件名