powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / sed через Perl
7 сообщений из 7, страница 1 из 1
sed через Perl
    #39542583
Фотография Vladimir aka jeltoesolnce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Пришу такое:
Код: php
1.
system( qq( sed -i '' 's/\([^>\$]\)plugin-name/\1$pname/g' $_ ) ) == 0 or warn "Can't change $File::Find::name:$?\n";


Ожидаю, что в содержимом дающегося "седу" файла выражения plugin-name, начинающиеся с не '>' и с не '$' будут заменены на "что-то-там другое".

Не меняет. Почему нет? \([^>\$]\) - захват символа не > и не (экранированный)$. Что не так?

Best regards.
...
Рейтинг: 0 / 0
sed через Perl
    #39542938
scrip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно удвоить \ перед скобками и \1

qq это же эквивалент двойных кавычек

s/\([^>\$]\)plugin-name/\1$pname/g
превратилось в
s/([^>$])plugin-name/1pvalue/g


а sed не понимает неэкранированные группирующие скобки, по-крайней мере в линуксе
...
Рейтинг: 0 / 0
sed через Perl
    #39543013
Фотография Vladimir aka jeltoesolnce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сенкс).
...
Рейтинг: 0 / 0
sed через Perl
    #39543609
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir aka jeltoesolnce,
запускать подпроцессом sed из-под perl в File::Find-обработчике ...

У тебя какие-то личные разногласия с Ларри, не нравятся его шляпы и гавайские рубахи ?
...
Рейтинг: 0 / 0
sed через Perl
    #39543785
Фотография Vladimir aka jeltoesolnce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для меня Perl есть то, что Ларри и задумывал - язык для объединения сценариев. Что знаю - то и леплю).
...
Рейтинг: 0 / 0
sed через Perl
    #39543890
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я обычно так с File::Find общаюсь;

запускаю утилитку find2perl ,
она генерит вот такую заготовку:

Код: perl
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
use strict;
use File::Find ();

# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.

# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name   = *File::Find::name;
*dir    = *File::Find::dir;
*prune  = *File::Find::prune;

sub wanted;



# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '.');
exit;


sub wanted {
    my ($dev,$ino,$mode,$nlink,$uid,$gid);


    (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
    print("$name\n");
}



и выкидываю из обработчика wanted() всё лишнее, заменяя на своё.

Если тебе по нраву однострочник с sed в режиме 'inplace edit', то этот функционал легко воспроизводится в Perl
с помощью while с магическим алмазом и установки глобальной переменной $^I.

Итак:

Код: perl
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
sub wanted {
    
    local @ARGV = $_;
    local $^I   = '';

    while( <> ) {
        s/_THIS_/_THAT_/g;
        print;
    }
}



Аналогичный перловый однострочник, кстати, будет выглядеть так:
Код: powershell
1.
perl -i -pe 's/_THIS_/_THAT_/g' *



с тем отличием, что File::Find шляется по всему дереву,
а данный однострочник только по текущему каталогу.
...
Рейтинг: 0 / 0
sed через Perl
    #39543910
Фотография Vladimir aka jeltoesolnce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, ну да.

У меня утилита меняет заголовки в скелете php-плагина на нужные мне). Запускается редко, скорость и "идеологическая верность" роли не играет, и для восприятия мне так удобнее. Но, спасибо в любом случае).
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / sed через Perl
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]