2016-06-20 1 views
2

Я пытаюсь удалить нули в начале строки до четвертых символов. Если ноль выходит за пределы 4-й позиции, тогда не нужно его удалять. Я не могу это сделать правильно.удалять первые N символов условно, используя sed или awk или что-либо.

Состояние:

<------Delete 1 zero at start. 
0<-----Delete 2 zeros at start. 
00<----Delete 3 zeros at start. 
000<----Delete 4 zero at start. 
0000<---Delete 4 zero at start and leave 1, output
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 

ответ

7

Используйте {} указать количество появлений и -r, чтобы расширенное регулярное выражение синтаксис:

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

работал, я должен использовать -r –

+0

@krzyk, он работал. Спасибо. Примите это через несколько минут. –

+6

Нет необходимости в g ... –

1

Удаление от одного до четырех нулей в начале строки.

gawk '{gsub(/^0{1,4}/,"")}1' file 
abc0 
abcde0 
abcede0 
0abcede0