2017-06-20 80 views
0

有以下類型的目錄結構:shell腳本,通過不同的目錄循環和搜索特定HTML標籤

    services (directory) 
     |           |    
serviceui (directory)      serviceui1 (directory) 
     |           | 
service1 (directory)      service2 (directory) 
     |           | 
frontend         frontend 
     |           | 
      Have different files and each file has 
      a html tag with different tags. 
      For example, a sample file may contain 
      <Id>CheckUser</Id> 
      <Id1> bbb </Id1> 
      <Id2> drer </Id2> 

我想寫的是通過所有的目錄循環,一個bash shell腳本和前端目錄中的不同文件查找serviceId html標籤,並找出有多少個serviceIds中包含「CheckUser」 的內容。

這是我第一次使用bash腳本。任何正視這一點都會非常有幫助。

在此先感謝!

回答

1

如何'回合grep -r -c '<Id>CheckUser</Id>' *

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/16480086) – DimaSan

+0

其實,它的目的是成爲一個答案。如在「你怎麼試試這個?」也許我說得很糟糕,但是你看到有什麼理由說它不起作用嗎? – Jack

+0

添加一些解釋可以真正提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – DimaSan

0

您可以遞歸使用grep:

grep -Fsrc '<Id>CheckUser</Id>' "services (directory)" |awk -F: '$NF > 0' 

這告訴grep來搜索給定的查詢以純文本(-F,這比使用正則表達式快得多),忽略錯誤,如解析目錄作爲文件(-s),遞歸地解析(-r),並計算每個檢查文件包含模式的行數。

awk命令禁止計數爲零的任何行。 -F:將字段分隔符設置爲冒號,$NF指的是最後一個字段的值(NF是字段數,$NF是字段號NF的值)。 Awk是條件列表;此代碼是$NF > 0 { print $0 }的縮寫,因爲該特定操作是未提供操作時的默認操作。這是可選的(你可能想看到所有的零)。

 

注:

你的問題是難以閱讀。我已經過度糾正並假設目標目錄名字實際上是services (directory),但您可以使用任何路徑,即使.作爲您當前的位置。

這假設你並沒有真正使用HTML或XML。它將無法找到像這樣的多行實例:

<Id> 
    CheckUser 
</Id> 

如果這是一個問題,您確實需要了解XML結構的代碼。否則,你需要一些相當醜陋的黑客,像摺疊所有空白並將文件解析爲單行字符串。