我有一个文件,其中的行包含这样的文本
something,12:3456789,somethingelse
foobar,12:345678,somethingdifferent
对于行中第二个项目在:
之后有6位数字的行,我想通过在前面添加0并移动:
来改变其格式。例如,上面的内容将更改为:
something,12:3456789,somethingelse
foobar,01:2345678,somethingdifferent
我不知道如何使用sed或任何unix命令行工具执行此操作
答案 0 :(得分:1)
您只需要匹配中间的部分,该部分有2位数字,后跟:
,后跟精确地 6位数字。如果您将文本适当地捕获到各个组中,则可以在结果中移动它们。请注意,模式结尾处的\b
字边界是为了确保我们精确匹配6位数字,而不匹配包含7位数字的行:
/\b(\d)(\d):(\d{6})\b/0\1:\2\3/
|__________________| |______|
pattern replacement
这给出了预期的输出。您可以在线here
进行实验 sed
没有Perl样式说明符,例如\d
。相反,您将需要使用[[:digit:]]
。这是与sed
sed -E 's/\b([[:digit:]])([[:digit:]]):([[:digit:]]{6})\b/0\1:\2\3/g' myfile.txt
正如@Jonathan Leffler指出的那样,\b
在Mac的sed
上不起作用,因此您需要在正则表达式模式的前后添加逗号,然后将其替换为替换模式