如何删除除最后一个之外的所有字符

时间:2011-02-26 18:16:59

标签: sed

我想解析一个文件并使用sed删除一个数字的所有前导0。 (当然,如果我有类似0000的结果,则结果为0)如何做到这一点?

3 个答案:

答案 0 :(得分:0)

我想你可能正在寻找这个 这就是你的答案。你需要修改当然。

答案 1 :(得分:0)

这可能过于复杂,但它可以捕获我测试的所有角落情况:

sed 's/^\([^0-9]*\)0/\1\n0/;s/$/}/;s/\([^0-9\n]\)0/\1\n/g;s/\n0\+/\n/g;s/\n\([^0-9]\)/0\1/g;s/\n//g;s/}$//' inputfile

说明:

这使用分而治之的技术来插入换行符来分隔一行的片段,以便可以单独操作它们。

  • s/^\([^0-9]*\)0/\1\n0/ - 在第一个零
  • 之前插入换行符
  • s/$/}/ - 在末尾添加缓冲区字符
  • s/\([^0-9\n]\)0/\1\n/g - 在每个前导零之前插入换行符(并删除第一个)
  • s/\n0\+/\n/g - 删除剩余的前导零
  • s/\n\([^0-9]\)/0\1/g - 替换裸零
  • s/\n//g - 删除换行符
  • s/}$// - 删除行尾缓冲区

此档案:

0 foo 1 bar 01 10 001 baz 010 100 qux 000 00 0001 0100 0010
100 | 00100
010 | 010
001 | 001
100 | 100
0 | 0
00 | 0
000 | 0
00 | 00
 00 | 00
00 | 00 z

变为:

0 foo 1 bar 1 10 1 baz 10 100 qux 0 0 1 100 10
100 | 100
10 | 10
1 | 1
100 | 100
0 | 0
0 | 0
0 | 0
0 | 0
 0 | 0
0 | 0 z

答案 2 :(得分:0)

如果你有前导零并伴随着一串数字,你所要做的就是将它转换成整数。像这样的东西

$ echo "000123 test " | awk '{$1=$1+0}1'
123 test

这不需要任何大量的正则表达式,无论它们是简单还是过于复杂。

类似地(Ruby1.9 +)

$ echo "000123 test " | ruby -lane '$F[0]=$F[0].to_i; print $F.join(" ")'
123 test

对于所有0000的案例

$ echo "0000 test " | ruby -lane '$F[0]=$F[0].to_i; print $F.join(" ")'
0 test
$ echo "000 test " | awk '{$1=$1+0}1'
0 test