- 论坛徽章:
- 2
|
场景:假如/tmp下面有3个子目录为$b, g++, g@:F。
文件~/a内容如下 其下面的子文件大小):- 20 /tmp/$b/b1
- 20 /tmp/$b/b2
- 20 /tmp/$b/b3
- 10 /tmp/g++/g1
- 10 /tmp/g++/g2
- 10 /tmp/g++/g3
- 40 /tmp/g@:F/g1
- 40 /tmp/g@:F/g2
- 40 /tmp/g@:F/g3
复制代码 现在想把~/a 中包括 /tmp/$b, /tmp/g++, /tmp/g@:F 行的第1列都相加(思路是: 用perl命令行,抓取~/a中包括 关键字的行,然后将其第1列相加):- my @dir=`ls /tmp`;
- foreach my $one_dir (@dir) {
- chomp $one_dir;
- my $size = `perl -ne 'our \$t;
- \$t+=\$1 if m{^\\s*(\\d+)\\s+$one_dir};
- END {print "\$t\\n"}' $ENV{HOME}/a`;
- print "$size\n";
- }
复制代码 但是会报错,原因是 上面的if m{ $one_dir } 中包含了特殊字符$, @, +。
在 if 匹配里面:既能够 将 $one_dir变量解析为字符串,但是又能够屏蔽掉字符串里面的特殊字符呢?
附:上面只是一个例子,实际中还可能存在很多其它的特殊字符。
麻烦大家帮忙看下。
深夜发帖求助,不容易哈。
多谢
|
|