代码之家  ›  专栏  ›  技术社区  ›  Anthony

查找正则表达式并将其替换为其他格式

  •  0
  • Anthony  · 技术社区  · 6 年前

    我有一个文件,其中的行包含如下文本

    something,12:3456789,somethingelse
    foobar,12:345678,somethingdifferent
    

    对于行中第二项在后面有6位数字的行 : 我想通过在前面添加一个0并移动 : 。例如,上述内容将更改为:

    something,12:3456789,somethingelse
    foobar,01:2345678,somethingdifferent
    

    我不知道如何使用sed或任何unix命令行工具来实现这一点

    1 回复  |  直到 6 年前
        1
  •  1
  •   sshashank124    6 年前

    你只需要匹配中间的部分,那里有两个数字后跟 : 然后 确切地 6位数。如果你在单独的组中适当地捕捉文本,你可以在结果中移动它们。注意 \b 模式末尾的单词边界是为了确保我们只匹配6个数字,而不匹配包含完整7个数字的行:

    /\b(\d)(\d):(\d{6})\b/0\1:\2\3/
     |__________________| |______|
           pattern       replacement
    

    这就给出了预期的输出。你可以在网上进行实验 here


    sed 没有Perl风格的说明符,例如 \d .相反,您需要使用 [[:digit:]] .以下是使用的最新正则表达式 塞德

    sed -E 's/\b([[:digit:]])([[:digit:]]):([[:digit:]]{6})\b/0\1:\2\3/g' myfile.txt
    

    正如@Jonathan Leffler指出的, \b 在Mac上不起作用 塞德 因此,您需要在正则表达式模式的前后添加逗号,然后在替换模式中替换它们