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

如何让grep遵循文本中的通配符、行首行尾符并忽略其他内容

解决方案

要实现让grep遵循foo.txt中的行首^、长度通配符.{64}/.{65}和行尾$,同时忽略中间无关内容的需求,我们可以分两步操作:

1. 从foo.txt提取有效正则模式

foo.txt里每行的核心匹配规则被无关的路径内容包裹,我们用sed剥离这些冗余内容,只保留需要的正则标记:

sed -E 's/^(\^\.\{64,65\}).*(\$)/\1\2/' foo.txt

这个命令的具体作用:

  • -E 启用扩展正则语法,不用对花括号{}转义,简化正则书写
  • 正则表达式会捕获每行开头的^.{64}或^.{65},以及结尾的$,中间所有内容用.*匹配并丢弃
  • 最终输出纯匹配模式:^.{64}$(匹配整行64个字符)和^.{65}$(匹配整行65个字符)

2. 用提取的模式匹配bar.txt内容

结合bash的进程替换功能,我们可以直接把sed处理后的模式作为grep的规则源,完成匹配:

grep -E -f <(sed -E 's/^(\^\.\{64,65\}).*(\$)/\1\2/' foo.txt) bar.txt

参数说明:

  • -E 让grep使用扩展正则,确保.{64}这类元字符被正确解析为“任意64个字符”的规则
  • -f 指定从进程替换的输出中读取匹配模式(相当于临时把sed的输出当作规则文件)
  • <(...) 是进程替换语法,将sed命令的输出转为grep可读取的临时输入源

这样就能精准匹配到bar.txt中所有整行长度为64或65个字符的行,完全符合你的需求。

内容的提问来源于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 08:08:13