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

Sed 如何删除除最后一个字符以外的所有字符,sed,Sed,我想解析一个文件并使用sed删除一个数字的所有前导0。(当然,如果我有类似0000的结果,则结果为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 说明: 这使用了插入新线的分

我想解析一个文件并使用sed删除一个数字的所有前导0。(当然,如果我有类似0000的结果,则结果为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

如果您有前导零,并且它伴随着数字字符串,那么您所要做的就是将其转换为整数。像这样的

$ echo "000123 test " | awk '{$1=$1+0}1'
123 test
这将不需要任何数量的正则表达式,无论它们是简单的还是过于复杂的

类似地(Ruby1.9+)

适用于所有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

嘿,谢谢你的回答,事实上,我会处理这个问题,当时我很头晕,但这里是:sed的/^0\+([0-9])/\1/'@user:我的回答有用吗?链接断了。不再是一个有效的答案:(
$ 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