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

如何让grep读取文件中的通配符规则过滤指定文本行?

使用grep通过外部规则文件过滤文本行

这事儿其实很简单,grep本身就支持从文件读取匹配规则,刚好满足你的需求。下面分两种情况给你方案:

情况1:先整理规则文件格式(推荐)

你的foo.txt里现在带了双引号,而且所有规则挤在一起,这会让grep识别出错。先把foo.txt改成每行一个正则规则的格式,去掉多余引号:

.* /Users/1337/X$
.* /Users/1337/R$
.* /Users/1337/W$

然后直接运行下面的命令就能过滤bar.txt:

grep -f foo.txt bar.txt

这个命令里的-f参数就是告诉grep:“去这个文件里读我的匹配规则,每行算一个”。

情况2:不想修改规则文件

如果不想动foo.txt的内容,我们可以用bash的进程替换先把引号去掉,再传给grep:

grep -f <(sed 's/"//g' foo.txt) bar.txt

这里的<(sed 's/"//g' foo.txt)会先把foo.txt里的所有双引号删掉,再把处理后的内容作为临时规则文件给grep用。

效果验证

拿你给出的bar.txt示例内容来说:

1121cfccd5913f0a63fec40a6ffd44ea64f9dc135c66634ba001d10bcf4302a2 /Users/1337/R
dc460da4ad72c482231e28e688e01f2778a88ce31a08826899d54ef7183998b5 /Users/1337/T
4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865 /Users/1337/W

运行命令后,会输出匹配到的两行:

1121cfccd5913f0a63fec40a6ffd44ea64f9dc135c66634ba001d10bcf4302a2 /Users/1337/R
4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865 /Users/1337/W

要是你担心行尾可能有多余空格,可以把正则改成.* /Users/1337/X\s*$,这样就能匹配行尾带空白的情况啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:37:31