Sed замена на слов на другие значения
Всем привет. Делаю задачу 'заменить все почтовые индексы и названия их городов на 50-370 Wroclaw'
написал такую команду sed 's/^[0-9]\{2\}[ -][0-9]\{3\}[[:space:]][0-9A-Za-z]/50-370 Wroclaw/'
было 05-620 Karpacz
45-343 Waldenburg
стало 50-370 Wroclawarpacz т.е есть лишние буквы 'arpacz' это проблема ну и в других словах тоже так (
Какую команду написать чтобы она еще удаляла лишние буквы в конце ( если они будут)?
Ответы (1 шт):
У вас после [0-9A-Za-z] нет квантификатора, то есть находится только 1 цифра или буква. Чтобы найти 1 и более букв с помощью POSIX-совместимого регулярного выражения, используйте
\{1,\} # POSIX BRE: sed 's/.../.../'
\+ # POSIX BRE (GNU sed): sed 's/.../.../'
+ # POSIX ERE, sed -E 's/.../.../'
Параметр -E означает, что регулярное выражение написано с использованием синтаксиса POSIX ERE. См. больше информации о разнице POSIX BRE и POSIX ERE здесь.
Вы можете использовать одну из следующих команд:
sed 's/^[0-9]\{2\}[ -][0-9]\{3\}[[:space:]][0-9A-Za-z]\{1,\}/50-370 Wroclaw/' file > outfile
sed 's/^[0-9]\{2\}[ -][0-9]\{3\}[[:space:]][[:alnum:]]\+/50-370 Wroclaw/' file > outfile
sed -E 's/^[0-9]{2}[ -][0-9]{3}[[:space:]]+[[:alnum:]]+/50-370 Wroclaw/' file > outfile