如何使用Regex匹配每行第一个[之前的-字符,适配GNU sed替换需求
GNU sed实现方案
替换命令(示例将-替换为_,可自行修改为目标字符)
sed -E ':loop; s/^([^[]*)-/\1_/; t loop' 目标文件路径
逻辑说明
- 用
:loop定义循环标签,t loop表示上一次替换成功时跳转回标签重复执行,直到没有可替换的内容为止 - 替换规则
s/^([^[]*)-/\1_/中:^([^[]*)捕获行首到第一个[之间的所有非[字符,存入分组1- 仅匹配分组1后的第一个
-,替换后保留分组1内容,仅修改目标- - 循环执行后会把第一个
[之前的所有-全部替换完成,不会改动方括号内部的内容
匹配(非替换)场景用正则
如果仅需要提取匹配的-,不需要替换,可使用兼容PCRE的工具(比如GNU grep),正则如下:
-(?=[^[]*\[)
该正则通过正向预查,仅匹配后面跟着「若干非[字符 + 第一个[」的-,完全符合匹配需求。
内容的提问来源于stack exchange,提问作者Computergy
相关产品推荐
相关产品推荐

