如何在SED命令中实现大于A且小于B的模糊地址范围匹配?
在SED中实现模糊时间范围的匹配与编辑
要在SED中实现大于起始时间A、小于结束时间B的模糊范围操作,避免因无精确结束匹配导致处理到文件末尾,可以通过SED的条件分支与退出命令组合实现单行解决方案。
示例场景
针对以下日志,需要匹配并编辑3点到6点之间的行(不含6点及以后):
2012-12-21 00:03:44 .... 2012-12-21 01:44:12 .... 2012-12-21 02:30:13 .... 2012-12-21 04:15:16 .... 2012-12-21 05:23:05 .... 2012-12-21 07:21:22 ....
单行SED命令
sed '/^2012-12-21 0[3-5]:/!{/^2012-12-21 0[6-9]:/q;b}; s/..../abc/g' log.txt
命令解释
/^2012-12-21 0[3-5]:/!:筛选出不匹配3-5点时间的行,进入后续分支处理/^2012-12-21 0[6-9]:/q:如果行属于6点及以后,直接执行q命令退出SED,停止处理所有后续行b:如果行属于0-2点,执行b命令跳过当前行的编辑操作
- 剩下的匹配3-5点的行,执行指定的编辑操作(示例中为
s/..../abc/g,可替换为实际需要的编辑命令)
通用化调整
如果不需要固定日期,可扩展正则适配任意日期的时间范围:
sed -E '/^[0-9-]+ (0[3-5]):/!{/^[0-9-]+ (0[6-9]|1[0-9]|2[0-3]):/q;b}; s/xyz/abc/g' log.txt
内容的提问来源于stack exchange,提问作者user20837124
相关产品推荐
相关产品推荐

