您可以替换正则表达式匹配中的子字符串吗?

问题描述 投票:0回答:1

我正在尝试查找由于夏令时(开始或结束)而具有不正确时区的数据时间戳。如果时区不正确,我想将其替换为这些比赛的正确时区。

例如 2024-03-10T00:15:00-07:00 = 2024-03-10T00:15:00-08:00

我想出了以下正则表达式,并且能够使用 grep 找到文件中的罪魁祸首:

grep -E '~2024-03-10T[01]{2}:[0-9]{2}:[0-9]{2}-07:00' <filename>

我正在尝试使用 sed 和我想出的正则表达式进行替换,但我似乎无法让它正常工作。

这是我目前拥有的:

sed 's/\(~2024-03-10T[01]{2}:[0-9]{2}:[0-9]{2}\)-07:00~/\1-08:00~/g' filename

我错过了什么?该命令似乎没有进行任何替换。任何帮助,将不胜感激!预先感谢!

regex linux bash sed substring
1个回答
0
投票

设置:

$ cat filename
~2024-03-09T00:15:00-07:00~ some text
~2024-03-10T00:15:00-07:00~ some text
~2024-03-11T00:15:00-07:00~ some text

我倾向于使用

-E
来启用对扩展正则表达式的支持并简化捕获组语法。

这只需要对当前代码进行一些小的更改:

sed -E 's/(~2024-03-10T[01]{2}:[0-9]{2}:[0-9]{2})-07:00/\1-08:00/g' filename
    ^^    ^                                     ^

地点:

  • -E
    - 启用对扩展正则表达式的支持
  • (
    |
    )
    - 无需转义括号(捕获组分隔符)

这会生成:

~2024-03-09T00:15:00-07:00~ some text
~2024-03-10T00:15:00-08:00~ some text
~2024-03-11T00:15:00-07:00~ some text
© www.soinside.com 2019 - 2024. All rights reserved.