- 論壇徽章:
- 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
復制代碼 現(xiàn)在想把~/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變量解析為字符串,但是又能夠屏蔽掉字符串里面的特殊字符呢?
附:上面只是一個例子,實際中還可能存在很多其它的特殊字符。
麻煩大家?guī)兔聪隆?br />
深夜發(fā)帖求助,不容易哈。
多謝
|
|