1

我有管道分隔文件。我想去掉以 '00' 开头的子 ID 的数字,保持其余数字相同。例如:Karen Calvert50335491| 0020380050335491 |活动|100|KINGSPORT|KarenCalvert50335491@charter.net|8353/3000|住宅|FiberNode|田纳西|00:00:00:20:0f:03|东|423-343-9250|HSIPLUS|1826 HIGHLAND ST|服务1|MA|01602

预期 o/p-

凯伦卡尔弗特50335491| 20380050335491 |活跃|100|KINGSPORT|KarenCalvert50335491@charter.net|8353/3000|住宅|FiberNode|田纳西|00:00:00:20:0f:03|东|423-343-9250|HSIPLUS|1826 HIGHLAND ST|服务1|MA|01602

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

任何帮助表示赞赏。谢谢

4

3 回答 3

3

使用 sed:

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

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

于 2012-12-10T06:28:16.613 回答
2

这可能对您有用(GNU sed):

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

或更一般地说:

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

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

于 2012-12-10T12:05:03.557 回答
1

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

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

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

于 2012-12-10T14:21:51.410 回答