有以下类型的目录结构:
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脚本。对此提出任何建议都会非常有帮助。
提前致谢!!
答案 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结构的代码。否则你需要一些相当丑陋的黑客攻击,比如折叠所有空格并将文件解析为单行字符串。