You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从文件动态生成以|分隔、可用于grep -f的匹配模式列表

方法1:用paste命令实现(最简便)

paste命令本身就支持按指定分隔符拼接多行内容,直接搭配命令替换就能一步生成你需要的grep命令:
假设你的数字存储在num.txt文件中,直接执行以下命令即可:

grep -P "($(paste -sd '|' num.txt))\|" o.txt

参数说明:

  • paste -sd '|' num.txt:-s表示串行处理所有行,-d '|'指定分隔符为|,执行后直接输出11|12|31|40|42|90的拼接结果
  • $()是shell命令替换,会把内部命令的输出插到对应位置,刚好填充到正则的括号中

方法2:用xargs实现

如果要按你原本的思路用xargs实现,可以先用tr工具把换行符替换为|,再通过xargs的占位符参数插到命令对应位置:

tr '\n' '|' < num.txt | xargs -I {} grep -P "({})\|" o.txt

参数说明:

  • tr '\n' '|'把输入的换行符全部替换为|,得到拼接后的数字串
  • xargs -I {}表示把前面传入的内容作为变量,替换后续命令中所有{}的位置,实现把拼接串插到正则中间的效果

额外补充:直接用grep -f的方案

如果你需要生成供grep -f使用的模式列表,其实不需要拼接|,grep -f默认每行作为一个独立匹配模式,要匹配数字后跟|的场景可以直接这么写:

# 直接生成模式文件后匹配
sed 's/$/|/' num.txt > pattern.txt
grep -F -f pattern.txt o.txt

-F参数表示按固定字符串匹配,不需要正则解析,运行效率更高。

内容的提问来源于stack exchange,提问作者Eric Stotch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:24:05