У меня есть список номеров, например
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.
Затем я изменил его, чтобы внести другие необходимые изменения.
Спасибо за эту мельницу !!!!!