LINUX.ORG.RU

Как в bash'e преобразовать строку типа JhonL07 в Jhon L sss 007?

 ,


0

1

Естественно может быть и PeterJ02 и JasminL05 то есть имена и цифры разные.

Думал в сторону awk, разбивать строку как-нибудь по букве верхнего регистра, но нагуглить, и в мане ничего найти не могу.

Или вообще не awk?



Последнее исправление: cetjs2 (всего исправлений: 1)

JhonL07 в Jhon L sss 007

Эээ, я не улавливаю логики. Откуда берётся sss? Если бы знать, можно и регулярку накатать.

vurdalak ★★★★★
()
Ответ на: комментарий от vurdalak

Откуда берётся sss?

Да, немного запутано получилось, «sss» нужно вставить между буквой обозначающей фамилию и номером. По-этому и думал на счет awk, типа

awk {print $1 $2 sss 0$3}

Как-то так.

tamat
() автор топика

если я правильно понял:

$ (echo "JhonL07"; echo "PeterJ02"; echo "JasminL05") | sed -r 's/([A-Z][a-z]+)([A-Z])([0-9]+)/\1 \2 \3/'
Jhon L 07
Peter J 02
Jasmin L 05

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, то что нужно. Вот оно оказывается как в sed просто \1 \2, а не $1 $2 пойду читать ман.

tamat
() автор топика
$ echo 'PeterJ02
JasminL05
JhonL07' | sed 's/[A-Z]/ & sss /2'
Peter J sss 02
Jasmin L sss 05
Jhon L sss 07
emulek
()
Ответ на: комментарий от emulek

А чего хочет ТС — я не понял.

Это и хотел, что вы указали и уже выполнил те дейсвия, для которых требовалась эта команда.

Только не понимаю теперь почему строки не начинаются с пробела?

Пока писал понял что матчится только буква фамилии. Алсо, ваш вариант проще и удачнее, спасибо.

tamat
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.