Вставьте символ в определенном месте, используя sed - PullRequest
18 голосов
/ 27 июля 2011

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

Ответы [ 4 ]

18 голосов
/ 27 июля 2011
echo "201107" | sed 's/201107/2011-07/'

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

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

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

HTH

3 голосов
/ 22 февраля 2017

Для неопределенной версии 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

0 голосов
/ 30 августа 2013

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

echo '20110715000000' | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{6\}\)/\1-\2-\3/'
0 голосов
/ 27 июля 2011

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

...