使用perl而不是grep

时间:2011-12-28 14:40:02

标签: regex linux perl shell grep

在工作中,我们使用这种结构,例如,找出自上次更新以来在SVN中更改的所有文件的名称,并对它们执行svn add命令:

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

我想:“我希望我可以使用Perl单行脚本代替grep”。

是否可以做以及如何做?

P.S。:我发现Perl中有一个m//运算符。我认为它应该用在ARGV变量上(不知道他们在Perl中的名字 - 可能是$_数组还是$1类变量?)。

3 个答案:

答案 0 :(得分:4)

易:

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)'

答案 1 :(得分:2)

可以使用perl one-liner,但它仍然依赖shell命令,除非你能找到一个模块来处理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", $_;
    }
}

答案 2 :(得分:1)

我认为这就是你想要的

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

希望它有所帮助;)