URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10176
[ Назад ]

Исходное сообщение
"Perl и символ $"

Отправлено Перспективный , 12-Сен-17 18:57 
Привет, у меня не получается замена с символом $ на perl 5.26.0

вот так я делаю на sed
echo "aa bb$ cc"|sed -E 's|\S+\$|XXX|g'
aa XXX cc

а вот на perl
perl -E 'my $p="aa bb$ cc"; $p =~ s/\S+\$/XXX/g;  say "$p"'
aa bb

варианты с \Q \E не работают тоже. Как тут правильно делается?


Содержание

Сообщения в этом обсуждении
"Perl и символ $"
Отправлено ыы , 12-Сен-17 23:45 
> Привет, у меня не получается замена с символом $ на perl 5.26.0
> вот так я делаю на sed
> echo "aa bb$ cc"|sed -E 's|\S+\$|XXX|g'
> aa XXX cc
> а вот на perl
> perl -E 'my $p="aa bb$ cc"; $p =~ s/\S+\$/XXX/g;  say "$p"'
> aa bb
> варианты с \Q \E не работают тоже. Как тут правильно делается?

Правильно очевидно - не использовать двойные кавычки там где вы не хотите чтобы $ воспринимался как служебный символ.
Либо надо так "aa bb\$ cc" либо так 'aa bb$ cc'


"Perl и символ $"
Отправлено Перспективный , 13-Сен-17 05:41 
> Либо надо так "aa bb\$ cc"

Спасибо так работает, но я получаю данные без экранирования, и меня конечно интересует вариант
> либо так 'aa bb$ cc'

но не работает
perl -E 'my $p='aa bb$ cc'; $p =~ s/S+\$/XXX/g;  say "$p"'
<ничего>



"Perl и символ $"
Отправлено ЫЫ , 13-Сен-17 10:52 
>> Либо надо так "aa bb\$ cc"
> Спасибо так работает, но я получаю данные без экранирования, и меня конечно
> интересует вариант
>> либо так 'aa bb$ cc'
> но не работает
> perl -E 'my $p='aa bb$ cc'; $p =~ s/S+\$/XXX/g;  say "$p"'
> <ничего>

потому что однострочник с неэкранированным  спецсимволом ("одинарная кавычка").


"Perl и символ $"
Отправлено ЫЫ , 13-Сен-17 10:59 
>>> Либо надо так "aa bb\$ cc"
>> Спасибо так работает, но я получаю данные без экранирования, и меня конечно
>> интересует вариант
>>> либо так 'aa bb$ cc'
>> но не работает
>> perl -E 'my $p='aa bb$ cc'; $p =~ s/S+\$/XXX/g;  say "$p"'
>> <ничего>
> потому что однострочник с неэкранированным  спецсимволом ("одинарная кавычка").

для линукса (под виндой не сработает, экранироваь надо по другому):
perl -e "\$p='aa bb$ cc'; \$p=~s/\S+\\$/XXX/g;  print \$p;"


"Perl и символ $"
Отправлено XAnder , 13-Сен-17 12:25 
> для линукса (под виндой не сработает, экранироваь надо по другому):
> perl -e "\$p='aa bb$ cc'; \$p=~s/\S+\\$/XXX/g;  print \$p;"

Можно проще:

perl -E 'my $p=q{aa bb$ cc}; $p =~ s/\S+\$/XXX/g; say $p'


"Perl и символ $"
Отправлено ЫЫ , 13-Сен-17 13:55 
>> для линукса (под виндой не сработает, экранироваь надо по другому):
>> perl -e "\$p='aa bb$ cc'; \$p=~s/\S+\\$/XXX/g;  print \$p;"
> Можно проще:
>
perl -E 'my $p=q{aa bb$ cc}; $p =~ s/\S+\$/XXX/g; say $p'

Ну...Мне кажется вообще странным желание решать задачу через однострочник, подставляя ему значения в виде сформированной в том же однострочнике переменной.
Поэтому возможно что и этот случай не будет удовлетворять желаемому решению...