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

标签 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. 

例子:

输入文件:

cat file
0000abc0
00abcde0
0abcede0
00000abcede0

预期输出:

abc0
abcde0
abcede0
0abcede0

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

    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

最佳答案

使用 {} 指定出现次数,使用 -r 允许扩展正则表达式语法:

sed -r 's/^0{1,4}//g'

关于bash - 使用 sed 或 awk 或任何东西有条件地删除前 N 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37916366/

相关文章:

linux - 使用 awk 或 sed 比较多个文件的长度

bash - 匹配多行括号(使用 awk?)

bash - sed 或 awk 替换前 14 个出现的位置

python - Linux增加更多文本格式列的方法

bash 选项卡自动完成太慢

mysql - 如何将 CSV 列批量加载到 MySQL 表中

bash - awk 在匹配后打印第一次出现

awk - 在 Linux 中引用文件的行

bash - bash 中的 </dev/null 是什么?

linux - 根据另一个文件中的字符串拆分一个文件