2011-01-25 18 views
9

chciałbym Perl zrobić jedno-liner jak grepperl one-liner jak grep?

trochę jak to, ale nie jestem pewien, co dodać, że praca

$ (echo a ; echo b ; echo c) | perl -e 'a' 

DODANO Moja odpowiedź tutaj okładkach że bardziej
https://superuser.com/questions/416419/perl-for-matching-with-regex-in-terminal

+0

związane: http://stackoverflow.com/questions/3848360/how-can-i-implement -unix-grep-in-perl – codaddict

+0

Jeśli nie jesteś w jakimś niesamowicie zamkniętym Linuksie, gdzie 'grep' nie jest dostępny, prawdopodobnie lepiej po prostu użyć' grep' :-) – paxdiablo

+0

Zobacz także [perlrun] (http: //perldoc.perl.org/perlrun.html) manpage. –

Odpowiedz

23
(echo a; echo b; echo c) | perl -ne 'print if /a/' 
2

można zrobić to samo z Ruby, czy można sobie pozwolić na inne opcje

$ (echo a; echo b; echo c) | ruby -ne 'print if /a/' 
a 
$ (echo a; echo b; echo c) | ruby -ne 'print if $_["a"]' 
a 
+1

Dzięki za podpowiedź. Szukałem czegoś dla powłoki typu one-liners - Python jest zbyt nieporęczny, nawet Py2. Dobrze wiedzieć, że Ruby bierze tutaj swojego tatę Perla. –

5

Aby echo komentarz motłochu:

Jeśli chcesz użyć Perl regexes spróbować ack: http://betterthangrep.com/

+0

co z perlem? – barlop

+2

ack to perl, ale opakowane wszystkie ładne i ładne –

+0

@barlop To jest różnica między 'ack '^ \ S + foo \ s'' i' perl -wlne' m {^ \ S + foo \ s} i print " '- czyli około ~ 20 znaków zapisanych za każdym razem, gdy używam ack zamiast perla w tym celu. Również kiedy Perl pokazuje wyniki, to nie używa żadnych kolorów, podczas gdy ack koloruje wyjściowo podobnie jak grep. –