2016-08-13 57 views
0

我想用grep到的folloging secuence一个XML文件:grep的与Tab和回车XML

user defined modules) 
    |-->   
    <module> 

这是我的代码:

function check() 
{ 
     OLDIFS=$IFS 
     IFS=$'\n' 

     fileArray=($(find . -type f -not -path "./folder1/*" -not -path "*/folder2/*" -not -path "./folder3/*" -name "pom.xml" \ 
         | xargs awk -v RS='^$' 'match($0,/\|--> \(autogenerated code\)\t\n\t[^\n]+/,a){print a[0]}')) 
     IFS=$OLDIFS 

     # get length of an array 
     numberOfFiles=${#fileArray[@]} 

     # read all filenames 
     for ((i=0; i<${numberOfFiles}; i++)); 
     do 
      echo "ERROR:Found user code modules (file:line:occurrence): ${fileArray[$i]}" 
     done 


    if [ "$numberOfFiles" != "0" ]; then 
     echo "SUMMARY:Found $numberOfFiles pom.xml file(s) containing user code modules." 
     exit 1 
    fi 
} 

check 

不清楚如何能我处理它,因为它包含在中间的回车和标签中,并不像检索一个标签的内容那么简单。我在Linux下使用shell openSUSE 12.

我已经尝试grep -P但不兼容多种模式。一些技巧?

+0

我建议使用XML/HTML解析器(xmllint,xmlstarlet ...)。 – Cyrus

+1

[编辑]你的问题显示[mcve],包括简洁,可测试的样本输入和预期输出,以便我们可以开始考虑如何帮助你。 –

+0

我试图编辑代码示例。第一行包含在文本的末尾:TAB + ENTER。该示例的第二行以TAB开始。仍然是主要问题。非常感谢您的提示。 – user2961008

回答

0

你的问题还不清楚,但如果你想找到

|--> (autogenerated code)<tab> 
<tab><my code> 

其中<tab>代表制表符和<my code>是什么遵循第二个选项卡,以该行的结束,那么这里有一个方法与GNU AWK:

awk -v RS='^$' 'match($0,/\|--> \(autogenerated code\)\t\n\t[^\n]+/,a){print a[0]}' 

如果这不是你想要什么,然后编辑你的问题,以提供更清晰的说明和更真实的代表性的例子。

+0

谢谢埃德,我是新手在这里,不能提供所有信息作为我想要。你的答案非常有用。在第一个选项卡之后,还有一个回车符,作为示例的布局。该解决方案是否也涵盖了这种情况?再次感谢。明天即时通过gona测试并让你知道 – user2961008

+0

是的,请参阅正则表达式中2个选项卡('\ t's)之间的'\ n'。你是什​​么意思'不能提供所有我想要的信息?只需复制/粘贴到编辑器中并使用“{}”按钮对其进行格式化即可。 –

+0

请帮助最后的帮助! :)我需要准确地找到:(用户定义的模块)[ENTER] [TAB] [TAB] | - > [ENTER] [TAB] user2961008