如何在开始时使用sed去掉数字?

时间:2012-12-10 06:23:40

标签: regex unix sed

我有管道分隔文件。我想剥离以子ID的'00'开头的数字,保持其余的数字相同。 例如: Karen Calvert50335491 | 0020380050335491 | ACTIVE | 100 | KINGSPORT | KarenCalvert50335491@charter.net | 8353/3000 | RESIDENTIAL | FiberNode | TENNESSEE | 00:00:00:20:0f:03 | EAST | 423- 343-9250 | HSIPLUS | 1826 HIGHLAND ST | Service1 | MA | 01602

预期o / p -

Karen Calvert50335491 | 20380050335491 | ACTIVE | 100 | KINGSPORT | KarenCalvert50335491@charter.net | 8353/3000 | RESIDENTIAL | FiberNode | TENNESSEE | 00:00:00:20:0f:03 | EAST | 423-343-9250 | HSIPLUS | 1826 HIGHLAND ST | Service1 | MA | 01602

注意:在这个文件中有一些mac地址,也是'00'

的satritng

任何帮助表示赞赏。 感谢

3 个答案:

答案 0 :(得分:3)

使用sed:

 sed 's/^\([^|]*\)|0*\([^|]*\)/\1|\2/' input

通过\1匹配,捕获并保留^\([^|]*\)中的第一列,并捕获\2中的第二列,通过0*\([^|]*\)跳过前导0。然后,它通过/\1|\2/将匹配的部分(第1列和第2列)替换为这些列的捕获部分。

答案 1 :(得分:2)

这可能适合你(GNU sed):

sed -r 's/^([^|]*\|)0+/\1/' file

或更一般地说:

sed -r 's/^(([^|]*\|){1})0+/\1/' file

在这种情况下,1nth -1字段

答案 2 :(得分:1)

好悲伤。如果你想操纵第7个字段而不是第二个字段,请尝试使用sed解决方案。只需使用awk:

awk 'BEGIN{FS=OFS="|"} {sub(/^0+/,"",$2);print}' file

如果您想更改第7个字段而不是第2个字段,则只需将2美元更改为7美元。