Подтвердить что ты не робот

Можно ли использовать целые числа с нулями с использованием регулярных выражений?

У меня есть ряд чисел разной длины (от 1 до 6 цифр) в пределах некоторого текста. Я хочу выравнивать длины всех этих чисел, заполняя более короткие числа нулями.

например. Следующие 4 строки -

A1:11
A2:112
A3:223333
A4:1333
A5:19333
A6:4

Должны быть заполненные целые числа

A1:000011
A2:000112
A3:223333
A4:001333
A5:019333
A6:000004

Я использую "sed" и следующее combersome выражение:

sed -e 's/:\([0-9]\{1\}\)\>/:00000\1/' \
    -e 's/:\([0-9]\{2\}\)\>/:0000\1/' \
    -e 's/:\([0-9]\{3\}\)\>/:000\1/' \
    -e 's/:\([0-9]\{4\}\)\>/:00\1/' \
    -e 's/:\([0-9]\{5\}\)\>/:0\1/'

Можно ли сделать это в лучшем выражении, чем это?

4b9b3361

Ответ 1

Вы можете наложить его на слишком много нулей, а затем сохранить только последние шесть цифр:

sed -e 's/:/:00000/;s/:0*\([0-9]\{6,\}\)$/:\1/'

Результат:

A1:000011
A2:000112
A3:223333
A4:001333
A5:019333
A6:000004

Возможно, лучше использовать awk:

awk -F: '{ printf("%s:%06s\n", $1, $2) }'

Ответ 2

Вот решение perl:

 perl -n -e 'split /:/;printf("%s:%06d\n", @_)'

Вы задали регулярное выражение, поэтому я искал двоеточие для разделения с регулярным выражением, но в этом случае достаточно простой строки.

[[email protected] ~]$ cat tst.txt | perl -n -e 'split /:/;printf("%s:%06d\n", @_)'
A1:000011
A2:000112
A3:223333
A4:001333
A5:019333
A6:000004