Shell脚本循环遍历不同的目录并搜索特定的html标记

时间:2017-06-20 21:08:30

标签: bash shell

有以下类型的目录结构:

                  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标记,并找出有多少serviceId具有内容“CheckUser” 在它。

这是我第一次使用bash脚本。对此提出任何建议都会非常有帮助。

提前致谢!!

2 个答案:

答案 0 :(得分:1)

如何&#39;回合grep -r -c '<Id>CheckUser</Id>' *

答案 1 :(得分:0)

您可以递归使用grep:

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

这告诉grep以纯文本(-F搜索给定查询,这比使用正则表达式快得多),忽略将目录解析为文件(-s)等错误,解析递归地(-r),并计算包含每个检查文件的模式的行数。

awk命令禁止计数为零的任何行。 -F:将字段分隔符设置为冒号,$NF表示最后一个字段的值(NF是字段数,$NF是字段数NF的值1}})。 Awk是条件清单;此代码是$NF > 0 { print $0 }的简写,因为当未给出操作时,该特定操作是默认操作。这是可选的(您可能希望查看所有零)。

备注:

你的问题很难理解。我已经过度纠正并假设目标目录名称字面上为services (directory),但您可以使用任何路径,甚至.作为当前位置。

这假设您并未真正使用HTML或XML。它将无法找到这样的多行实例:

<Id>
  CheckUser
</Id>

如果这是一个问题,你真的需要能够理解XML结构的代码。否则你需要一些相当丑陋的黑客攻击,比如折叠所有空格并将文件解析为单行字符串。