使用sed或awk或任何东西有条件地删除前N个字符

P..*_*... 2 bash awk sed echo tr

我试图在行的开头删除零,直到第四个字符.如果超过第4个位置发生零,则无需删除它.我无法正确实现这一目标.

条件:

01230 <------Delete 1 zero at start.
001230 <-----Delete 2 zeros at start.
0001230 <----Delete 3 zeros at start.
00001230<----Delete 4 zero at start.
000001230<---Delete 4 zero at start and leave 1, output 01230
1234560<-----Delete nothing. 
Run Code Online (Sandbox Code Playgroud)

例:

输入文件:

cat file
0000abc0
00abcde0
0abcede0
00000abcede0
Run Code Online (Sandbox Code Playgroud)

预期产量:

abc0
abcde0
abcede0
0abcede0
Run Code Online (Sandbox Code Playgroud)

已经尝试过的事情:(当然没有帮助)

    cat file |sed 's/^[0]//g' <----This just delete one zero at the start
    000abc0
    0abcde0
    abcede0
    0000abcede0

    cat file | sed 's/^[0][0][0][0]//g'<---THis only works for line having 4 zeros.
    abc0
    00abcde0
    0abcede0
    0abcede0

cat file | sed 's/^[0]*//g' <-----Removes all the zeros at start. 
abc0
abcde0
abcede0
abcede0

cat file | sed 's/0//g'{4} <------I am lost what it do!!
000abc
00abcde0
0abcede0
000abcede
Run Code Online (Sandbox Code Playgroud)

Krz*_*soń 7

使用{}指定occurances的数量和-r允许扩展正则表达式语法:

sed -r 's/^0{1,4}//g'
Run Code Online (Sandbox Code Playgroud)