как заменить строку внутри регулярного выражения Perl - PullRequest
1 голос
/ 23 января 2012

Есть ли способ заменить символы внутри регулярного выражения?

вроде так:

find x | xargs perl -pi -e 's/(as dasd asd)/replace(" ","",$1)/'

Из комментария ОП

code find x | xargs perl -pi -e 's/work_search=1\/ttype=2\/tag=(.*?)">(.*?)<\/a>/work\/\L$1\E\" rel=\"follow\">$2<\/a>/g'

в этом случае я хочу заменить пробелы в $ 1 на _

Ответы [ 2 ]

2 голосов
/ 23 января 2012

Вы можете использовать вложенную замену:

$ echo 'foo bar baz' | perl -wpE's/(\w+ \w+ \w+)/ $1 =~ s# ##gr /e'
foobarbaz

Обратите внимание, что модификатор /r требует perl v5.14. Для более ранних версий используйте:

$ echo 'foo bar baz' | perl -wpE's/(\w+ \w+ \w+)/my $x=$1; $x=~s# ##g; $x/e'
foobarbaz

Обратите внимание, что вам нужно использовать другой разделитель для внутренней подстановки. Я использовал #, как вы можете видеть.

0 голосов
/ 23 января 2012

Насколько я понимаю, вы хотите убрать пробелы. Это правильно?

Вы можете сделать:

s/(as) (dasd) (asd)/$1$2$3/
...