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



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

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

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

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

我不知道如何使用sed或任何unix命令行工具执行此操作

您只需要匹配中间部分,其中有 2 位数字,后跟:位数字,后跟正6 位数字。如果适当地捕获单个组中的文本,则可以在结果中移动它们。请注意,模式末尾的b单词边界是为了确保我们在 6 位数字上匹配,而不是在具有完整 7 位数字的行上匹配:

/b(d)(d):(d{6})b/01:23/
|__________________| |______|
pattern       replacement

这将给出预期的输出。您可以在此处在线尝试


sed没有 Perl 样式的说明符,例如d。相反,您将需要使用[[:digit:]].这是适用于sed的更新正则表达式

sed -E 's/b([[:digit:]])([[:digit:]]):([[:digit:]]{6})b/01:23/g' myfile.txt

正如@Jonathan Leffler指出的那样,b不适用于Mac的sed,因此您需要在前面和后面的正则表达式模式中添加逗号,然后在替换模式中替换它们。

最新更新