我有一个文件中的项目列表,
foobar
barfoo
bar
faaboo
foo
boofar
fo
b
使用perl,我只是在脚本之后将通过文件名并删除所有3个字符或更少的字符。覆盖现有文件名(不创建新的或临时文件名),因此列表将成为。
foobar
barfoo
faaboo
boofar
答案 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)
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;