如何对多文件批量执行grep并将结果输出到原文件名加a后缀的新文件
批量匹配文件内容并生成对应结果文件的解决方案
你之前的find -exec写法失效是因为重定向符>无法被-exec直接识别为shell操作符,且直接在-exec参数内多次使用{}也存在解析限制,可使用以下几种方案实现需求:
方案1:find 配合 sh 调用实现
find . -maxdepth 1 -type f -name "[0-9]*-[0-9]*" -exec sh -c 'grep "你的实际匹配pattern" "$0" > "${0}a"' {} \;
说明:
-maxdepth 1限制仅处理当前目录下的文件,不递归子目录- 文件名匹配规则
[0-9]*-[0-9]*仅匹配数字-数字格式的文件,避免误伤其他文件 - 通过
sh -c将文件名作为参数传入shell环境,即可正常使用变量拼接实现重定向
方案2:当前目录直接用for循环(更简洁)
如果所有待处理文件都在当前目录,直接遍历更简单:
for f in [0-9]*-[0-9]*; do grep "你的实际匹配pattern" "$f" > "${f}a" done
方案3:awk实现单命令批量处理
awk '/你的实际匹配pattern/ { print > FILENAME "a" }' [0-9]*-[0-9]*
说明:依赖awk内置变量FILENAME自动获取当前处理的文件名,匹配到目标pattern的行会直接写入到原文件名加a后缀的文件中,如需追加内容而非覆盖,将>改为>>即可。
内容的提问来源于stack exchange,提问作者kinkybudget
相关产品推荐
相关产品推荐

