Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / sed через Perl / 7 сообщений из 7, страница 1 из 1
26.10.2017, 15:38
    #39542583
Vladimir aka jeltoesolnce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sed через Perl
Привет.

Пришу такое:
Код: 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
27.10.2017, 05:47
    #39542938
scrip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sed через Perl
Нужно удвоить \ перед скобками и \1

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

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


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

У тебя какие-то личные разногласия с Ларри, не нравятся его шляпы и гавайские рубахи ?
...
Рейтинг: 0 / 0
28.10.2017, 20:21
    #39543785
Vladimir aka jeltoesolnce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sed через Perl
Для меня Perl есть то, что Ларри и задумывал - язык для объединения сценариев. Что знаю - то и леплю).
...
Рейтинг: 0 / 0
29.10.2017, 07:48
    #39543890
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sed через Perl
я обычно так с 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
29.10.2017, 10:30
    #39543910
Vladimir aka jeltoesolnce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sed через Perl
А, ну да.

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


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