Какова Ваша последняя полезная острота Perl (или канал, включающий Perl)? [закрытый]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

15
задан jfs 19 July 2013 в 15:14
поделиться

21 ответ

Все остроты из ответов, собранных в одном месте:

  • perl -pe's/([\d.]+)/localtime $1/e;' access.log

  • ack $(ls t/lib/TestPM/|awk -F'.' '{print $1}'|xargs perl -e 'print join "|" => @ARGV') aggtests/ t -l

  • perl -e'while(<*.avi>) { s/avi$/srt/; rename <*.srt>, $_ }'

  • find . -name '*.whatever' | perl -lne unlink

  • tail -F /var/log/squid/access.log | perl -ane 'BEGIN{$|++} $F[6] =~ m{\Qrad.live.com/ADSAdClient31.dll} && printf "%02d:%02d:%02d %15s %9d\n", sub{reverse @_[0..2]}->(localtime $F[0]), @F[2,4]'

  • export PATH=$(perl -F: -ane'print join q/:/, grep { !$c{$_}++ } @F'<<<$PATH)

  • alias e2d="perl -le \"print scalar(localtime($ARGV[0]));\""

  • perl -ple '$_=eval'

  • perl -00 -ne 'print sort split /^/'

  • perl -pe'1while+s/\t/" "x(8-pos()%8)/e'

  • tail -f log | perl -ne '$s=time() unless $s; $n=time(); $d=$n-$s; if ($d>=2) { print qq ($. lines in last $d secs, rate ),$./$d,qq(\n); $. =0; $s=$n; }'

  • perl -MFile::Spec -e 'print join(qq(\n),File::Spec->path).qq(\n)'

См. соответствующие ответы для их описаний.

7
ответ дан 30 November 2019 в 23:47
поделиться
14
ответ дан 30 November 2019 в 23:47
поделиться

В некоторое время я нашел, что что-либо, что я захочу сделать с жемчугом, который достаточно короток, чтобы быть сделанным на командной строке с 'жемчугом-e', может быть добито большего успеха, легче и быстрее с нормальными функциями ZSH без стычки заключения в кавычки. Например, пример выше мог быть сделан как это:

for foo in *.avi; mv *.srt ${foo:r}.srt

ОБНОВЛЕНИЕ

onliner выше является obiously неправильным, жаль о том, что не читал тщательно. Вот правильная версия:

srt=(*.srt); for foo in *.avi; mv $srt[1] ${foo:r}.srt && srt=($srt[2,-1])
-5
ответ дан 30 November 2019 в 23:47
поделиться

Вот тот, который я нахожу удобными, когда контакт с набором сжал файлы журнала:

   open STATFILE, "zcat $logFile|" or die "Can't open zcat of $logFile" ;
0
ответ дан 30 November 2019 в 23:47
поделиться

Разверните все вкладки до пробелов: perl -pe'1while+s/\t/" "x(8-pos()%8)/e'

, Конечно, это могло быть, покончите: набор и: мочите в Vim.

1
ответ дан 30 November 2019 в 23:47
поделиться

Одна из новых острот, которые получили место в моем ~ / мусорное ведро:

perl -ne '$s=time() unless $s; $n=time(); $d=$n-$s; if ($d>=2) { print "$. lines in last $d secs, rate ",$./$d,"\n"; $. =0; $s=$n; }'

Вы использовали бы его против хвоста файла журнала, и это распечатает уровень производимых строк.

Хотите знать сколько хитов в секунду ваши дела Ваши веб-серверы? хвост-f регистрируется | this_script.

2
ответ дан 30 November 2019 в 23:47
поделиться

Удалите окончания строки MS-DOS.

perl -p -i -e 's/\r\n$/\n/' htdocs/*.asp
3
ответ дан 30 November 2019 в 23:47
поделиться

Фильтрует поток разделенных строк файла конфигурации пробела (списки пары имя/значение), сортируя каждую строку файла конфигурации индивидуально:

perl -00 -ne 'print sort split /^/'
2
ответ дан 30 November 2019 в 23:47
поделиться

Удалите дубликаты в переменной пути:

set path=(`echo $path | perl -e 'foreach(split(/ /,<>)){print $_," " unless $s{$_}++;}'`)
3
ответ дан 30 November 2019 в 23:47
поделиться

В ответ на комбинацию Ovids vim/ack:

я также часто ищу что-то и затем хочу открыть файлы соответствия в Vim, таким образом, я сделал меня небольшим ярлыком некоторое время назад (работы в ZSH только, я думаю):

function vimify-eval; {
    if [[ ! -z "$BUFFER" ]]; then
        if [[ $BUFFER = 'ack'* ]]; then
            BUFFER="$BUFFER -l"
        fi  
        BUFFER="vim  \$($BUFFER)"
        zle accept-line
    fi  
}

zle -N vim-eval-widget vimify-eval

bindkey '^P' vim-eval-widget

Это работает как это: Я ищу что-то с помощью ack, как ack some-pattern. Я смотрю на результаты и если мне нравится он, я нажимаю стрелку - чтобы получить ack-строку снова и затем нажать CTRL+P. Что происходит, затем то, что ZSH добавляет и "-l" для списка имен файлов, только если команда запускается с "ack". Затем это помещает "$ (...)" вокруг команды и "энергии" перед ним. Затем все это выполняется.

3
ответ дан 30 November 2019 в 23:47
поделиться

Я использую это вполне часто для быстрого преобразования времен эпохи в полезную метку даты.

perl -l -e 'print scalar(localtime($ARGV[0]))'

Делают псевдоним в Вашей оболочке:

alias e2d="perl -le \"print scalar(localtime($ARGV[0]));\""

Затем канал число эпохи к псевдониму.

echo 1219174516 | e2d

Много программ и утилит на значениях эпохи использования Unix/Linux для представления времени, таким образом, это оказалось неоценимым для меня.

3
ответ дан 30 November 2019 в 23:47
поделиться

@dr_pepper

Удалите литеральные дубликаты в $PATH:

$ export PATH=$(perl -F: -ane'print join q/:/, grep { !$c{$_}++ } @F'<<<$PATH)

Распечатайте уникальные чистые пути от %PATH% переменная среды (это не затрагивает ../ и одинаково, замена File::Spec->rel2abs Cwd::realpath если это желательно), Это не острота, чтобы быть более портативным:

#!/usr/bin/perl -w
use File::Spec; 

$, = "\n"; 
print grep { !$count{$_}++ } 
      map  { File::Spec->rel2abs($_) } 
      File::Spec->path;
4
ответ дан 30 November 2019 в 23:47
поделиться

Один из самых больших пожирателей ресурсов пропускной способности на уровне $work является веб-рекламой загрузки, таким образом, я смотрю на низко висящий плод, ожидающий, чтобы быть выбранным. Я избавился от рекламы Google, теперь у меня есть Microsoft в моей строке достопримечательностей. Таким образом, я выполняю хвост на файле журнала и выбираю строки интереса:

tail -F /var/log/squid/access.log | \
perl -ane 'BEGIN{$|++} $F[6] =~ m{\Qrad.live.com/ADSAdClient31.dll}
    && printf "%02d:%02d:%02d %15s %9d\n",
        sub{reverse @_[0..2]}->(localtime $F[0]), @F[2,4]'

то, Что делает канал Perl, должно начаться путем установки автосброса на истинный, так, чтобы любой, на которого реагируют, был сразу распечатан. Иначе вывод, который это разделило на блоки и каждый получает пакет строк, когда буфер вывода заполняется. Переключатель-a разделяет каждую входную строку на пробеле и сохраняет результаты в массиве @F (функциональность, вдохновленная возможностью awk разделить входные записи на его 1$, 2$, 3$... переменные).

Это проверяет, содержит ли 7-е поле в строке URI, который мы стремимся (использующий \Q сохранить нас боль выхода из неинтересных метасимволов). Если соответствие найдено, это структурные распечатки программы время, исходный IP и число байтов, возвращенных из удаленного сайта.

время получено путем взятия времени эпохи в первом поле и использования 'localtime' для разламывания его на его компоненты (час, минута, во-вторых, день, месяц, год). Это берет часть первых трех возвратов элементов, во-вторых, минута и час, и инвертирует порядок получить час, минуту и второй. Это возвращается как три массива элемента, наряду с частью третьего (IP-адрес) и пятое (размер) от исходного массива @F. Эти пять аргументов передаются sprintf, который форматирует результаты.

4
ответ дан 30 November 2019 в 23:47
поделиться

Острота Perl я использую большинство, является калькулятором Perl

perl -ple '$_=eval'
6
ответ дан 30 November 2019 в 23:47
поделиться

Файлы журнала сквида. Они являются великими, не так ли? Кроме по умолчанию у них есть seconds-from-the-epoch как поле времени. Вот острота, которая читает из файла журнала сквида и преобразовывает время в человекочитаемую дату:

perl -pe's/([\d.]+)/localtime $1/e;' access.log

С маленькой тонкой настройкой, можно сделать его только строками дисплея с ключевым словом, которым Вы интересуетесь. Следующие часы для доступов stackoverflow.com и печати только те строки, с человекочитаемой датой. Для создания этого более полезным я даю ему вывод tail -f, таким образом, я вижу доступы в режиме реального времени:

tail -f access.log | perl -ne's/([\d.]+)/localtime $1/e,print if /stackoverflow\.com/'
11
ответ дан 30 November 2019 в 23:47
поделиться

Проблема: медиаплеер автоматически не загружается, подзаголовки из-за их имен отличаются от соответствующих видеофайлов.

Решение: Переименуйте весь *.srt (файлы с подзаголовками) для соответствия *.avi (файлы с видео).

perl -e'while(<*.avi>) { s/avi$/srt/; rename <*.srt>, $_ }'

ПРОТЕСТ: Порядок сортировки исходного видео и имен файлов подзаголовка должен быть тем же.

Здесь, более подробная версия вышеупомянутой остроты:

my @avi = glob('*.avi');
my @srt = glob('*.srt');

for my $i (0..$#avi)
{
  my $video_filename = $avi[$i];
  $video_filename =~ s/avi$/srt/;   # 'movie1.avi' -> 'movie1.srt'

  my $subtitle_filename = $srt[$i]; # 'film1.srt'
  rename($subtitle_filename, $video_filename); # 'film1.srt' -> 'movie1.srt'
}
11
ответ дан 30 November 2019 в 23:47
поделиться

Общая идиома использования find ... -exec rm {} \; удалить ряд файлов где-нибудь в дереве каталогов не особенно эффективно в этом, он выполняется rm управляйте однажды для каждого найденного файла. Одна из моих привычек, перенесенных со дней, когда компьютеры не были вполне как быстро (dagnabbit!), должен заменить много вызовов к rm с одним вызовом к жемчугу:

find . -name '*.whatever' | perl -lne unlink

perl часть командной строки читает список файлов, испускаемых* find, один на строку, урезает новую строку и удаляет файл с помощью встроенного perl's unlink() функция, которая берет $_ как его аргумент, если никакой явный аргумент не предоставляется. ($_ установлен на каждую строку входа благодаря -n флаг.) (*These дни, большинство find команды делают -print по умолчанию, таким образом, я могу пропустить ту часть.)

Мне нравится эта идиома не только из-за эффективности (возможно менее важный в эти дни), но также и потому что она имеет меньше гармоничных/неловких ключей, чем ввод традиционного -exec rm {} \; последовательность. Это также старается не заключать в кавычки проблемы, вызванные именами файлов с пробелами, кавычками, и т.д., которых у меня есть многие. (Более устойчивая версия могла бы использовать find -print0 опция и затем спрашивает perl для чтения разграниченных пустым указателем записей вместо строк но я обычно довольно уверен, что мои имена файлов не содержат встроенные новые строки.)

9
ответ дан 30 November 2019 в 23:47
поделиться

Вы не можете думать об этом как о Perl, но я использую ack неукоснительно (это - умная grep замена, записанная в Perl), и это позволяет мне отредактировать, например, все свои тесты Perl, которые получают доступ к конкретной части нашего API:

vim $(ack --perl -l 'api/v1/episode' t)

Как примечание стороны при использовании энергии Вы можете запускать все тесты в буферах Вашего редактора .

Для чего-то с более очевидным (если простой) Perl, я должен был знать, сколько тестовых программ, используемых, тестирует приспособления в t/lib/TestPM каталоге (я сократил команду для ясности).

ack $(ls t/lib/TestPM/|awk -F'.' '{print $1}'|xargs perl -e 'print join "|" => @ARGV') aggtests/ t -l

Примечание, как "соединение" превращает результаты в regex для питания к ack.

11
ответ дан 30 November 2019 в 23:47
поделиться

Получите удобочитаемый вывод из du , отсортированный по размеру:

perl -e '%h=map{/.\s/;7x(ord$&&10)+$`,$_}`du -h`;print@h{sort%h}'
2
ответ дан 30 November 2019 в 23:47
поделиться

Извлечение репутации Stack Overflow без необходимости открывать веб-страницу:

perl -nle "print '  Stack Overflow        ' . $1 . '  (no change)' if /\s{20,99}([0-9,]{3,6})<\/div>/;" "SO.html"  >> SOscores.txt

Предполагается, что страница пользователя уже была загружена в файл SO.html. Для этого я использую wget. Обозначения здесь предназначены для командной строки Windows; он будет немного отличаться для Linux или Mac OS X. Вывод добавляется в текстовый файл.

Я использую его в сценарии BAT, чтобы автоматизировать выборку репутации на четырех сайтах семейства: Переполнение стека, сбой сервера, суперпользователь и переполнение мета-стека.

3
ответ дан 30 November 2019 в 23:47
поделиться

У меня есть список тегов, с помощью которых я идентифицирую части текста. Главный список имеет формат:

text description {tag_label}

Важно, чтобы {tag_label} не дублировались. Итак, есть этот красивый простой сценарий:

perl -ne '($c) = $_ =~ /({.*?})/; print $c,"\n" ' $1 | sort  | uniq -c | sort -d

Я знаю, что могу сделать все в оболочке или Perl, но это было первое, что пришло в голову.

1
ответ дан 30 November 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: