$ echo 'qxxxwwwyrrytxyyyxiiixyydddydyhyjylllyyxyxyy' | tr xy yx qyyywwwxrrxtyxxxyiiiyxxdddxdxhxjxlllxxyxyxx
$ cat ./replace.pl #!/usr/bin/perl -w my $line = $ARGV[0]; print( $line , "\n\r" ); $line =~ s/x/xxxx/g; $line =~ s/y/yyyy/g; $line =~ s/xxxx/y/g; $line =~ s/yyyy/x/g; print ( $line , "\n\r" ); $ perl ./replace.pl x-xx-xx-xx-xx-xx-xy-yy-yy-yy-yy-yy-yy-y x-xx-xx-xx-xx-xx-xy-yy-yy-yy-yy-yy-yy-y y-yy-yy-yy-yy-yy-xy-xx-xx-xx-xx-xx-xx-x $ perl ./replace.pl qxxxwwwyrrytxyyyxiiixyydddydyhyjylllyyxyxyy qxxxwwwyrrytxyyyxiiixyydddydyhyjylllyyxyxyy qyyywwwxrrxtxxxyyiiixxydddxdxhxjxlllxxxxxyy
> Мне кажется, тут по другому поиздеваться хотели.
> Так это посимвольная замена, а в условии только глобальная.
> Как сделать так, чтобы из файла А были стерты все строки, которые есть в файле Б
> Как получить файл В, в котором будет то, чего нет в в Б, но есть в А
mv В А
> Какую бы мы замену не сделали, найдется такой текст, в котором невозможно будет отличить замененные буквосочетания от уже находившихся в тексте.
> Например, меняем x на xy. После замены не будет ху, которые пришли из исходника. Обратная замена xy на x возвращает исходный текст.
> но есть такие замены, для которых не требуется отличать "замененные" от "уже бывших", т.к. "бывшие" перестали существовать.
0 \x\z\/x/z/ s x \x\ \\x\\z\/\x\/z/ s z /z/ \\x\\/z/\/\x\//z// s \x\ \z\ \\z\\/z/\/\z\//z// s /z/ /x/ \\z\\/x/\/\z\//x// s \z\ z \z\/x/\/z//x// s /x/ x \z\x\/z/x/
0 \x\z\/x/z/ s x \x \\x\z\/\x/z/ s z /z \\x\/z\/\x//z/ s \x \z \\z\/z\/\z//z/ s /z /x \\z\/x\/\z//x/ s \z z \z\/x\/z//x/ s /x x \z\x\/z/x/
$ cat replace.pl #!/usr/bin/perl -w my $line = $ARGV[0]; print( $line , "\n\r" ); $line =~ s/d/dd/g; $line =~ s/x/dx/g; $line =~ s/y/dy/g; $line =~ s/dx/y/g; $line =~ s/dy/x/g; $line =~ s/dd/d/g; print ( $line , "\n\r" ); $ perl ./replace.pl dyyyddyxxxydydyxxxxdyydydxdddddddyyyyyxxd dyyyddyxxxydydyxxxxdyydydxdddddddyyyyyxxd dxxxddxyyyxdxdxyyyydxxdxdxdddddddxxxxxyyd
> В два прохода.
> Проверяем> проверить
> узнать количество символов в тексте и затем заменить, скажем, все x на последовательность, длина которой должна быть больше исходного текста
> В редакторе нет find, только replace.
$ cat replace.pl #!/usr/bin/perl -w use Term::ANSIColor; my $line = $ARGV[0]; print( $line , "\n\r" ); $line =~ s/d/dd/g; $line =~ s/x/xdx/g; $line =~ s/y/ydy/g; $line =~ s/xdx/y/g; $line =~ s/ydy/x/g; $line =~ s/dd/d/g; print ( $line , "\n\r" ); $ cat lol.txt | xargs perl ./replace.pl xxxxxxxyxxxdxxyxxxyyxxydxxdxxxdyxxddxyxxxyxyxyxdxyyxxyyyxyydxydxxydyxyddxdxxxdxyxdxdxdyxxdyyxdydxddxxddyxddd yyyyyyyxyyydyyxyyyxxyyxdyydyyydxyyddyxyyyxyxyxydyxxyyxxxyxxdyxdyyxdxyxddydyyydyxydydydxyydxxydxdyddyyddxyddd
$ perl ./replace.pl \\x\\y\/x/y/ \x\y/x/y/ \y\x/y/x/
$ perl ./replace.pl \\x\\y\\/x/y/ \x\y\/x/y/ \y\x\/y/x/
> Проверь >>34774? (/ и \ - буквы)
> можно улучшить двумя способами:> 1) Не использовать дополнительные символы.> 2) Использовать меньшее число замен.
- hanabira 0.6.1320- + wakaba + futallaby + futaba -