在文件中查找数据超过多行的字符串

时间:2014-01-28 03:34:52

标签: linux find

我想返回包含某些字符串的文件名。查看文件来源时,格式为

<Code>5107</Code>
    <Active>False</Active>

如何在Linux中搜索上述数据?我将一直在搜索XML文件

我尝试了以下内容(基于对Stack Overflow的搜索)但没有一个正在运行:

find . -iname '*xml' | xargs grep '<Code>5107</Code>
    <Active>False</Active>' -sl

find . -iname '*xml' | xargs grep '<Code>5107</Code>^p<Active>False</Active>' -sl

2 个答案:

答案 0 :(得分:0)

您可以使用gawk执行此操作,例如

gawk '/<Code>5107<\/Code>/ { getline ; if ( $0 ~ "<Active>False</Active>" ) { fnames[FILENAME]++ }
      END { for ( f in fnames ) { print f } }' *XML
    如果一行符合您的<Code>5107<\/Code>模式,
  1. 处理它的参数,则会覆盖下一行,如果匹配<Active>False</Active>,则将FILENAME存储在数组中
  2. 最后打印每个FILENAME匹配(仅一次)

答案 1 :(得分:0)

Use this simple command:
 1.Find command used to find the all xml files 
 2.grep -l - print the file name of matched pattern
 3.grep "patter1\|pattern2" - searched for multiple pattern


[linux-$]find . -iname "*.xml" -exec grep -l "<Code>5107</Code>\|<Active>False</Active>" {} \;