查找和删除小于X字符的行长

时间:2011-01-01 22:35:25

标签: perl

我有一个文件中的项目列表,

foobar
barfoo
bar
faaboo
foo
boofar
fo
b

使用perl,我只是在脚本之后将通过文件名并删除所有3个字符或更少的字符。覆盖现有文件名(不创建新的或临时文件名),因此列表将成为。

foobar
barfoo
faaboo
boofar

2 个答案:

答案 0 :(得分:8)

一衬垫:

perl -ine '{print if /.{4}/}' filename

你可以使用length(为换行符添加1)而不是正则表达式,如果这是你的想象,正如Jonathan Leffler在评论中指出的那样 - 它可能在非常大的文件上更快。这是Windows版本(请注意cmd使用双引号而不是单引号):

perl.exe -i.bak -n -e "{print if length > 4}" filename

此外,为了回答您的评论,遗憾的是您无法在没有备份文件的情况下在Windows上执行就地-i编辑。请参阅to this SO post以获取详细说明(同样,Windows限制,而非Perl)以及解决方法。

答案 1 :(得分:4)

Tie::File

use warnings;
use strict;
use Tie::File;

my $file = shift;
tie my @array, 'Tie::File', $file or die;
@array = grep { length > 3 } @array;
untie @array;