use*_*814 5 grep shell-script text-processing wc
我想统计一个角色被成功删除的次数。问题是日志文件的一行会显示脚本即将删除角色:
Prepare to remove role X
Run Code Online (Sandbox Code Playgroud)
下一行将告诉我删除是否成功:
删除成功:
Delete Successful
Run Code Online (Sandbox Code Playgroud)
删除失败:
Failed to delete role X: error code
Run Code Online (Sandbox Code Playgroud)
如何计算成功删除角色的次数?我只会使用以下 grep:
grep "Delete Successful" | wc -l
Run Code Online (Sandbox Code Playgroud)
但是,我也在删除以与上述角色相同的方式记录的策略。IE:
Prepare to delete policy X
Delete Successful
Run Code Online (Sandbox Code Playgroud)
或者
Failed to delete policy X: error code
Run Code Online (Sandbox Code Playgroud)
有没有办法在一行上搜索“准备删除角色”,然后计算下一行说“删除成功”的次数?
如果您grep是 GNU grep,这是一个快速而肮脏的解决方案:
grep -A1 "Prepare to remove role" | grep "Delete Successful" | wc -l
Run Code Online (Sandbox Code Playgroud)
grep 选项-A1告诉 grep 打印匹配行和匹配行后面的一行。然后第二个 grep 只打印删除成功的行。
请注意,只有在“准备删除角色 X”行后面紧跟“删除成功”行时,这才会可靠地工作。
另请注意:您不需要,wc -l因为 grep 内置了该功能:
grep -A1 "Prepare to remove role" | grep -c "Delete Successful"
Run Code Online (Sandbox Code Playgroud)