Как вставить тире в строку, используя sed (например, от 201107 до 2011-07)?
201107
2011-07
echo "201107" | sed 's/201107/2011-07/'
Должно работать.Но шучу, вот более общее решение:
echo "201107" | sed 's/^\(.\{4\}\)/\1-/'
Это вставит - после первых четырех символов.
-
HTH
Для неопределенной версии sed (по крайней мере, в моем GNU sed 4.2.2) вы можете просто сделать:
echo "201107" | sed 's/./&-/4'
/4 -> заменить 4-е вхождение (изшаблон поиска .)
/4
.
& -> обратная ссылка на весь матч
&
Я узнал об этом из другого поста: https://unix.stackexchange.com/questions/259718/sed-insert-character-at-specific-positions
Я знаю, что это выкопать массивного динозавра, но если вы хотите убрать 6 хвостовых нулей
echo '20110715000000' | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{6\}\)/\1-\2-\3/'
Следующее будет соответствовать при выполнении замены только для строк из четырех цифр, за которыми следуют строки из двух цифр.необходимость избегать скобок и скобок (но не скобок).Мое решение должно быть 's/(\d{4})(\d{2})/\1-\2/', если бы не эти особенности.
's/(\d{4})(\d{2})/\1-\2/'