Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

perl. stdout|grep ,stdin, etc

27K
13 ноября 2007 года
korisk
12 / / 11.08.2007
Добрый вечер.

Все знают как пользоваться grep.
I. cmd|grep word
или
II. cmd > ./file.out; grep word ./file.out
Обе команды работют одинаково, независимо от времени выполнения cmd.

Перловый скрипт
grep.pl:
@str = <>;
print make_grep(@str);
Не завершится, пока на в ходе не появиться EOF, т.е. вариант II не сработает.

Если использовать select, то скрипт получается зависимым от времени выполнения cmd.

...
select($stdin,0...,$time);
...

если $time меньше времени выполнения cmd, то grep.pl ничего не получает, а большим $time делать невыгодно.

Может кто-нибудь подскажет как сделать grep.pl похожим на grep!?
Или я что-то жутко путаю?

Спасибо.
2
16 ноября 2007 года
squirL
5.6K / / 13.08.2003
ну навскидку так:
Код:
if ((scalar @ARGV) == 0 )
{
  die "Incorrect args";
}

my $pattern = shift @ARGV;

while (<>)
{
  print $_ if /$pattern/;
}

доработайте и будет вам счастье
27K
16 ноября 2007 года
korisk
12 / / 11.08.2007
Спасибо, конечно, но боюсь вы не правильно меня поняли.

$echo sdf | /tmp/tmp.pl sdf
где, /tmp/tmp.pl - написаный вами код отлично работает
но..
$/tmp/tmp.pl sdf
будет ждать пока на stdin не попадет EOF или \n
В этом и был вопрос.
Как определить, что на stdin ничего нет?
Select не предлагать.

возможно что-то с трубами, но тут я теряюсь
27K
17 ноября 2007 года
korisk
12 / / 11.08.2007
Вопрос решился - ужно использовать операторы

:
-u File has setuid bit set.
-g File has setgid bit set.
-k File has sticky bit set.
-t Filehandle is opened to a tty.
-T File is a text file.
-B File is a binary file (opposite of -T).

А трубы тут - полный бред.
2
17 ноября 2007 года
squirL
5.6K / / 13.08.2003
Цитата: korisk
Спасибо, конечно, но боюсь вы не правильно меня поняли.

$echo sdf | /tmp/tmp.pl sdf
где, /tmp/tmp.pl - написаный вами код отлично работает
но..
$/tmp/tmp.pl sdf
будет ждать пока на stdin не попадет EOF или \n


я понял вопрос так, что нужно сымитировать стандартный grep. стандартный grep раотает именно так.

27K
17 ноября 2007 года
korisk
12 / / 11.08.2007
[korisk@korsik dictionary]$ grep
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
[korisk@korsik dictionary]$



Возможно, у меня не стандартный
2
17 ноября 2007 года
squirL
5.6K / / 13.08.2003
вы умеете читать? или вы просто любитель поспорить? перечитайте все заново.
Цитата:
$/tmp/tmp.pl sdf
будет ждать пока на stdin не попадет EOF или \n


grep sdf будет делать то же самое. если мой скрипт запустить так, как это сделали вы - он тоже завершит свою работу. можете вместо die туда добавить заглушку для вывода help'a

27K
17 ноября 2007 года
korisk
12 / / 11.08.2007
Извините, вы правы.
Протру очки.

Скрипт:
#!/usr/bin/perl
my $pattern = shift @ARGV;


die "some help \n" if( -t STDIN && @ARGV==0);

while (<>)
{
print $_ if /$pattern/;
}
Работат так, как я хотел.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог