Назад | Перейти на главную страницу

Использование sed для добавления нуля к четырехзначным числам

У меня есть список номеров, например

1394

49020

344

34

4904290

2350

5

Я пытаюсь добавить «0» к четырехзначным числам с помощью sed, поэтому в приведенном выше примере должны быть указаны «01394» и «02350», а все остальное оставить как есть.

Я использую команду sed 's/[0-9]\{4\}/0&/' но это включает числа от четырех и более цифр. Я попытался включить конец строки, чтобы указать, что мне нужны только четырехзначные числа, например: sed 's/[0-9]\{4\}$/0&/' но это добавило «0» ко второму месту пятизначного числа, поэтому в приведенном выше примере «49020» превратилось бы в «409020».

Буду признателен за любую помощь в этом!

Вы хотите добавить только четырехзначные числа, поэтому вам нужно сопоставить начало и конец, например:

sed 's/^[0-9]\{4\}$/0&/'

Я иногда использую что-то вроде этого:

sed -r \
    -e 's/^[0-9]{1}$/0&/' \
    -e 's/^[0-9]{2}$/0&/' \
    -e 's/^[0-9]{3}$/0&/' \
    -e 's/^[0-9]{4}$/0&/' \
    -e 's/^[0-9]{5}$/0&/' \
    -e 's/^[0-9]{6}$/0&/'

что должно оставить все числа как семь цифр. Конечно, есть более простые способы с другими инструментами, чем sed.

Я нахожу sed капризным. Вот как ты это делаешь. Вместо того

 sed 's/[0-9]\{4\}/0&/'

Добавьте в конец терминатора строки:

 sed 's/^[0-9]\{4\}\>/0&/'

Обратите внимание на /> после второй скобки. = Конец слова. Это глупо, не знаю, почему не работает указание линз. Может быть, некоторые эксперты дадут нам знать, почему это так.

Кстати, пробовал с вставкой начала строки и без нее - он работает в любом случае s / [0-9 или s / ^ [0-9]

Это сработало для меня.

sed 's/^[0-9]\{4\}$/0&/'

Я смог изменить его с помощью команды -i и пробела / имени файла. Как показано ниже.

sed -i 's/^[0-9]\{4\}$/0&/' /tmp/filename

Он добавит к четырехзначным числам в файле 0.

Затем я изменил его, чтобы внести другие необходимые изменения.

Спасибо за эту мельницу !!!!!