Вставьте символ в определенное место, используя sed

Как вставить тире в строку с помощью sed (например, от 201107 до 2011-07)?


person irek    schedule 27.07.2011    source источник


Ответы (4)


echo "201107" | sed 's/201107/2011-07/'

Должно сработать. Но шучу, вот более общее решение:

echo "201107" | sed 's/^\(.\{4\}\)/\1-/' 

Это добавит - после первых четырех символов.

ХТН

person Zsolt Botykai    schedule 27.07.2011

Для неопределенной версии sed (по крайней мере, моей GNU sed 4.2.2) вы можете просто сделать:

echo "201107" | sed 's/./&-/4'

/4 -> заменить для 4-го вхождения (шаблона поиска .)

& -> обратная ссылка на все совпадение

Я узнал об этом из другого сообщения: https://unix.stackexchange.com/questions/259718/sed-insert-character-at-specific-positions

person Johnny Wong    schedule 22.02.2017

Следующее будет соответствовать выполнению замены только для строк из четырех цифр, за которыми следуют строки из двух цифр.

$ echo '201107' | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)/\1-\2/'
2011-07

Регулярное выражение Sed немного неудобно из-за отсутствия \d и необходимости избегать скобок и фигурных скобок (но не скобок). Мое решение должно быть 's/(\d{4})(\d{2})/\1-\2/', если бы не эти особенности.

person Eric Wilson    schedule 27.07.2011

Я знаю, что это выкопать огромного динозавра, но если вы хотите убрать 6 нулей в конце

echo '20110715000000' | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{6\}\)/\1-\2-\3/'
person PsychoData    schedule 30.08.2013