Как вставить тире в строку с помощью sed (например, от 201107
до 2011-07
)?
Вставьте символ в определенное место, используя sed
Ответы (4)
echo "201107" | sed 's/201107/2011-07/'
Должно сработать. Но шучу, вот более общее решение:
echo "201107" | sed 's/^\(.\{4\}\)/\1-/'
Это добавит -
после первых четырех символов.
ХТН
Для неопределенной версии 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
Следующее будет соответствовать выполнению замены только для строк из четырех цифр, за которыми следуют строки из двух цифр.
$ echo '201107' | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)/\1-\2/'
2011-07
Регулярное выражение Sed немного неудобно из-за отсутствия \d
и необходимости избегать скобок и фигурных скобок (но не скобок). Мое решение должно быть 's/(\d{4})(\d{2})/\1-\2/'
, если бы не эти особенности.
Я знаю, что это выкопать огромного динозавра, но если вы хотите убрать 6 нулей в конце
echo '20110715000000' | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{6\}\)/\1-\2-\3/'