#sed #number-formatting
Вопрос:
Я пытаюсь сгруппировать цифры; Проблема возникает только при использовании символа подчеркивания:
$ echo "12345678912345678901234567890" | sed ':a;s/B[0-9]{3}($|_)/_amp;/;ta'
При использовании других персонажей работа выполняется:
$ echo "12345678912345678901234567890" | sed ':a;s/B[0-9]{3}($|-)/-amp;/;ta'
Также:
$ echo "12345678912345678901234567890" | sed ':a;s/B[0-9]{3}($|:)/:amp;/;ta'
…и так далее. Я пытался убрать подчеркивание, но оно делает то же самое.
Комментарии:
1. Пожалуйста, добавьте свой ожидаемый результат
2.
B
это отрицаемая версияb
, граница слов.Word
включает буквенно-цифровые символы и символ подчеркивания. ПоэтомуB
соответствует промежутку между цифрами, а также промежутку между цифрой и подчеркиванием.3. Я знал значение B, но, похоже, не заметил проблемы, которую это вызывает… это бесконечный цикл, не так ли?
4. Вместо того, чтобы применять
ta
команду, продублируйте подстановку и наблюдайте за результатом. N. B. значениеgoto
может быть бесконечным и никогда не вернется.--debug
Опция в GNU sed также может пролить свет на меньшее.sed '...' file --debug | less
Ответ №1:
Это может сработать для вас (GNU sed):
sed -E ':a;s/(.*[0-9])([0-9]{3})/1_2/;ta' file
Используйте greed ( .*
) для вызова обратного отслеживания, затем найдите 4 цифры подряд и вставьте подчеркивание между первой и второй, повторите.