Использование perl вместо grep - PullRequest
2 голосов
/ 28 декабря 2011

На работе мы используем эту конструкцию, чтобы, например, выяснить имена всех файлов, измененных в SVN с момента последнего обновления, и выполнить для них команду svn add:

svn st | grep '^\?' | perl -pe 's/^\s*\?// | xargs -L 1 svn add'

И я подумал: «Хотел бы я использовать Perl однострочный скрипт вместо grep».

Можно ли это сделать и как, если да?

PS: Я обнаружил, что в Perl есть оператор m//.Я думаю, что его следует использовать для переменных ARGV (не знаю их имен в Perl - это может быть массив $_ или просто $1 -подобные переменные?).

Ответы [ 3 ]

4 голосов
/ 28 декабря 2011

Легко:

svn st | perl -lne 'print if s/^\s*\?//' | xargs -L 1 svn add

Или сделать все в Perl:

perl -e '(chomp, s/^\s*\?//) && system "svn", "add", $_ for qx(svn st)'
2 голосов
/ 28 декабря 2011

Можно использовать perl one-liner, но он все равно будет полагаться на команды оболочки, если только вы не найдете модуль для обработки вызовов svn. Не уверен, что это на самом деле повысит читабельность производительности.

perl -we 'for (qx(svn st)) { if (s/^\s*\?//) { system "svn", "add", $_ } }'

В версии скрипта:

use strict;
use warnings;

for (qx(svn st)) {
    if (s/^\s*\?//) {
        system "svn", "add", $_;
    }
}
1 голос
/ 28 декабря 2011

Я думаю, это то, что вы хотите

svn st | perl -ne 's/^\s*\?// && print' | xargs -L 1 svn add

Надеюсь, это поможет;)

...