Поиск и удаление строк длиной менее X символов - PullRequest
0 голосов
/ 02 января 2011

У меня есть список элементов в файле,

foobar
barfoo
bar
faaboo
foo
boofar
fo
b

Используя perl, я сразу после скрипта, который пройдет через имя файла и удалит все элементы не более 3 символов. Перезаписать существующее имя файла (без создания нового или временного имени файла), таким образом, список станет.

foobar
barfoo
faaboo
boofar

Ответы [ 2 ]

8 голосов
/ 02 января 2011

Однострочный:

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

Вы можете использовать length (добавьте 1 для символа новой строки) вместо регулярных выражений, если вам это нравится, как отметил Джонатан Леффлер в комментариях - это, вероятно, быстрее на очень большихфайлы.Вот версия для Windows (обратите внимание на использование двойных кавычек, требуемых cmd вместо одинарных кавычек):

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

Кроме того, чтобы ответить на ваш комментарий, к сожалению вы не можете выполнить на месте -i редактирует в Windows без файла резервной копии .Пожалуйста, обратитесь к этому посту SO для подробного объяснения (опять же, ограничения Windows, а не Perl), а также обходного пути.

4 голосов
/ 02 января 2011

Галстук :: Файл

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...