如何在多个可执行程序的帮助信息输出中搜索指定内容并显示对应程序名
如何在多个可执行程序的帮助信息输出中搜索指定内容并显示对应程序名
我明白你的需求——批量检查一堆可执行程序的帮助信息,找出包含特定字符串的内容,同时明确这些内容来自哪个程序对吧?你之前的命令已经走对了方向,但确实没法关联到具体的程序,这里给你几个实用的改进方案:
方案一:给每一行帮助内容添加程序名前缀
这个方法最接近你熟悉的grep普通文件的输出格式,每一行匹配结果都会带上对应的程序名:
find -name "exec*" -executable -exec sh -c '{} --help | sed "s/^/{}: /"' \; | grep "stringToBeSearchedFor"
命令解释:
find -name "exec*" -executable:和你原来的逻辑一样,筛选出所有以exec开头的可执行文件-exec sh -c '{} --help | sed "s/^/{}: /"' \;:对每个找到的程序执行两步操作:- 运行
{} --help输出帮助信息 - 用
sed给每一行帮助内容的开头加上[程序名]:的前缀,这样所有输出行都和程序名绑定
- 运行
- 最后通过
grep搜索目标字符串,结果就会显示类似./executable1: 这里是包含stringToBeSearchedFor的帮助内容的格式
方案二:用分隔线标记程序名(适合快速定位)
如果你不需要每一行都带程序名,只想知道哪个程序里有匹配,可以用分隔线先打印程序名,再输出帮助内容,配合grep的上下文参数查看:
find -name "exec*" -executable -exec sh -c 'echo "=== {} ===" && {} --help' \; | grep -B1 -A2 "stringToBeSearchedFor"
命令解释:
echo "=== {} ===":在每个程序的帮助信息前打印带分隔线的程序名,比如=== ./executable1 ===grep -B1 -A2:-B1显示匹配行的前1行(也就是程序名那行),-A2显示匹配行的后2行,方便你查看匹配内容的上下文
补充说明
如果你的可执行文件名包含空格,上面的命令也能正常工作,因为find的{}会正确传递带空格的路径,sh -c里的单引号也能避免解析错误。
备注:内容来源于stack exchange,提问作者Kvothe
相关产品推荐
相关产品推荐

