2017-06-20 55 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结构的代码。否则,你需要一些相当丑陋的黑客,像折叠所有空白并将文件解析为单行字符串。