【问题标题】:how to search xml file , in condition that file name is inside the file如何搜索xml文件,条件是文件名在文件内
【发布时间】:2018-06-26 14:30:06
【问题描述】:

如果文件名在文件中,如何搜索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 ... ,或任何其他解决方案 ....

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>

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

/tmp/Prepare_file_Env.xml

【问题讨论】:

    标签: xml linux bash awk find


    【解决方案1】:
    $ 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 *$::"&lt;&lt;&lt;"$@":获取没有.xml的基本文件名
    2. grep -l: 如果找到字符串则打印文件名

    【讨论】:

    • 不好,因为 Prepare_file_Env 是一个变量!! ,这个变量应该得到tne文件名(没有.xml)
    • @enodmilvado:好吧,终于明白了; grep 现在找到文件名,而不是预定义字符串
    【解决方案2】:
     $ find . -type f -name '*.xml' -exec grep -o -P '(?<=<Name>).*(?=</Name>)' {} \;
     Prepare_file_Env
    

    总结:

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

    【讨论】:

      猜你喜欢
      • 2012-06-03
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      • 2018-01-24
      • 2020-02-24
      相关资源
      最近更新 更多