LINUX.ORG.RU

регулярные выражения Perl'а


0

1

Есть такая строка: dfasdf [QydQnrQ] Qkdlf qxQ Q 234

И вот такой вопрос. - Как найти в строке символ 'Q' и изменить его на символ 'T', но с одним условием: символы должны изменяться только в скобках?

Я пробовал такую конструкцию s/X/Y, но менялись либо один символ, либо все, а нужно только в скобках.


Первым регулярным выражение выдели подстроку в скобках, а потом s/X/Y (а лучше tr/X/Y).

JackYF ★★★★
()

Костыльно?

[20:35:00][aitap@Tarkus ~]> echo 'dfasdf [QydQnrQ] Qkdlf qxQ Q 234' | perl -ne '$old = $new = $_ for /\[(.*)\]/; $new =~ s/Q/T/g; s/$old/$new/; print'
dfasdf [TydTnrT] Qkdlf qxQ Q 234

Не обрабатывает больше одного [...] в строке.

AITap ★★★★★
()

Всем огромное спасибо!

zulix
() автор топика
Ответ на: Костыльно? от AITap

perl -wpe 's/(\[.*?\])/(my $x=$1)=~tr,Q,T,;$x/ge'

Проще не придумал...

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