Skip to content

Instantly share code, notes, and snippets.

@php-coder
Last active December 13, 2015 23:48
Show Gist options
  • Save php-coder/4994008 to your computer and use it in GitHub Desktop.
Save php-coder/4994008 to your computer and use it in GitHub Desktop.
Я согласен, что Perl и его однострочники могут быть удобны, но большинство примеров не очень удачны,
т.к. сделать тоже самое на shell-е может быть куда проще и при этом не нужно знать Perl и
помнить его ключи.
Например:
>cat file.csv | cut -d ';' -f 2 | grep -v afiskon
Легко упрощается до двух комманд:
>cut -d ';' -f 2 <file.csv | grep -v afiskon
а после и вовсе до одной:
>awk -F';' '{if($2~/afiskon/){print $2}}' file.csv
>perl -e 'printf "%x\n", 1234'
На шелле даже короче: printf "%x\n" 1234
>perl -le 'while(glob "cgi-bin/*"){ print if -f }'
find cgi-bin -type f
>find ./ | perl -lne 'if(-T $_){ $d = `cat "$_"`; print if ($d =~ /test/i) && ($d !~ /debug/i) }'
grep -rl test | xargs grep -L debug
>echo 'hello, world!' | perl -pe 's/hello/goodbye/i'
echo 'hello, world!' | sed 's/hello/goodbye/i'
>perl -le 'print time()'
date +%s
>perl -e 'while(1) { system("cat worker.log | grep Failed | wc -l"); sleep 60 }'
Ааааа! Очерендное useless cat usage, см. http://partmaps.org/era/unix/award.html
cat worker.log | grep Failed | wc -l легко заменяется на grep -c Failed worker.log
А вся конструкция на watch -n 1 'grep -c Failed worker.log'
>cat id_list.txt | perl -le 'chomp; system("wget \"http://example.ru/api/v1.0/items?item_id=$_\"")'
Как-то так: sed 's|.*|http://example.ru/api/v1.0/items?item_id=\1|' d_list.txt | xargs wget
К сожалению, ОЧЕНЬ часто приходится видеть как люди для задач в которых shell реально
рулит используют не совсем подходящие инструменты -- от Ruby до Java :(
Примеры с обработкой JSON и конвертированием Base64/urlencode более убедительны,
т.к. в шелле это сложнее сделать либо совсем нет возможности.
Про Perl ещё хорошие статейки ещё можно почитать от Бена Окопника:
http://www.linuxlib.ru/prog/okopnic/ ну и его *великолепные* истории в детективном
жанре "Однострочник месяца на Perl":
http://linuxpage.ru/old/content/607
http://linuxpage.ru/old/content/608
(где-то в сети были ещё...)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment