perl one liner替代这个bash“链”?

时间:2010-04-12 06:36:46

标签: perl

我试图按照“Minimal Perl”一书中描述的方式理解Perl。

我已将所有源txt文件上传到我自己的服务器上:results folder

我在“链”中使用了几个bash命令得到了输出:

cat run*.txt | grep '^Bank[[:space:]]Balance'|cut -d ':' -f2 | grep -E '\$[0-9]+'

我知道这远非最简洁和有效,但至少它有效......

由于我们的单一主题现在转移到Perl部分,我想知道是否有办法在一行中获得相同的结果?

我正在尝试类似以下代码的东西,但却停留在中间:

Chenxi Mao@chenxi-a6b123bb /cygdrive/c/eMarket/output
$ perl -wlne 'print; if $n=~/^Bank Balance/'
syntax error at -e line 1, near "if $n"
Execution of -e aborted due to compilation errors.

2 个答案:

答案 0 :(得分:7)

你应该没有;打印后。所以

perl -wlne 'print $1 if $n=~/^Bank Balance\s*:\s*(\d+)/'

答案 1 :(得分:3)

perl -F/\:/ -ane 'print $F[1]."\n" if /Bank Balance/ && $F[1]!~/\$-/' run*.txt

这里也是你的bash命令的简短版本,只使用awk

awk  -F": " '/Bank[ \t]*Balance/&& $2!~/\$-/{print $2}' run*.txt