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

如何使用Grep命令匹配首尾为下划线且中间可含下划线的字符串

用Grep匹配首尾下划线包裹的字符串

针对你需要匹配**首尾均为下划线、中间可包含任意字符(包括下划线)**的字符串,同时排除开头/结尾缺失下划线的情况,我推荐用GNU Grep的Perl兼容正则(PCRE)功能来实现精准匹配,下面是具体方案:

核心命令

grep -oP '(?<!_)_.*_(?!_)' your_file.txt

详细解释

  • -o:只输出匹配到的目标子串,而不是整行内容,这样能直接提取你需要的符合规则的字符串。
  • -P:开启PCRE模式,支持反向/正向预查这类高级正则特性,这是实现精准匹配的关键。
  • (?<!_):反向否定预查,确保我们要匹配的起始下划线_前面没有其他下划线——避免把长串的一部分(比如_abc_def_里的abc_def_)误判为有效匹配。
  • _.*_:核心匹配规则,匹配以_开头、_结尾的任意长度字符串,中间可以包含任何字符(包括下划线),完全满足你例子里的_ADFADF_ASFDSAFD_AFDSADF_这类场景。
  • (?!_):正向否定预查,确保匹配的结尾下划线_后面没有其他下划线,同样避免截断长串的情况。

测试验证

假设你有这样的测试文本:

SetODBCServerOverride.port=_CLIENT_ODBC_TUNNEL_PORT_
ASDFASDF_ASFDASDF_AFSDASFD
_ASDFASDF_ASDFASDF_ASDFAS
ASDFASD_ASDFSADF_ASFDASD_
_ADFADF_ASFDSAFD_AFDSADF_

执行上面的命令后,输出结果会是:

_CLIENT_ODBC_TUNNEL_PORT_
_ADFADF_ASFDSAFD_AFDSADF_

完全命中你需要保留的目标字符串,同时自动排除了所有不符合规则的条目。

无PCRE环境的替代方案

如果你的系统不支持PCRE(比如一些老旧版本的Grep),可以用扩展正则模式(-E)配合sed来处理:

grep -oE '(^|[^_])_.*_([^_]|$)' your_file.txt | sed 's/^[^_]*//; s/[^_]*$//'

这里grep会匹配带前后非下划线字符的目标串,再通过sed去掉多余的前缀和后缀,最终得到纯净的符合规则的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:32:09