2016-08-13 62 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