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

У меня есть серия чисел различных длин (варьирующийся от 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/'

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

21
задан Shriram V 25 June 2010 в 21:34
поделиться

2 ответа

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

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:%06d\n", $1, $2) }'
31
ответ дан 29 November 2019 в 21:17
поделиться

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

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

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

[pti@os5 ~]$ cat tst.txt | perl -n -e 'split /:/;printf("%s:%06d\n", @_)'
A1:000011
A2:000112
A3:223333
A4:001333
A5:019333
A6:000004
1
ответ дан 29 November 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: