如何将文件每行内容作为正则部分构建grep命令且不修改原文件?
解决方案
方法1:xargs快速生成命令
适合单一种正则模板的场景,直接通过管道传递文件内容,无需修改原文件:
cat names.txt | xargs -I {} sh -c 'grep -r "regex using {}" /你的搜索目录路径'
-I {}指定用每行内容替换占位符{}/你的搜索目录路径替换成实际要递归搜索的目录
方法2:while循环实现多正则复用
如果需要用同一批字符串匹配多种正则,while循环的灵活性更高,直接在循环体内添加多个grep命令即可:
while read -r name; do # 第一个正则匹配任务 grep -r "前缀_${name}_后缀" /目标目录1 # 第二个正则匹配任务 grep -r "^${name}$" /目标目录2 done < names.txt
read -r name逐行读取文件内容到变量name- 可按需添加任意数量的grep命令,直接通过
${name}代入字符串
方法3:临时脚本(复杂场景复用)
如果需要多次执行相同的批量grep任务,可以生成临时脚本执行,用完删除:
# 生成包含所有grep命令的临时脚本 cat names.txt | awk '{print "grep -r \"regex using " $0 "\" /搜索路径"}' > temp_grep.sh # 赋予执行权限并运行 chmod +x temp_grep.sh ./temp_grep.sh # 删除临时脚本 rm temp_grep.sh
- awk负责把每行字符串拼接成完整的grep命令
- 临时脚本可保存修改,适合需要反复调试的场景
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

