Intereting Posts
rpmsign с запросом пароля CLI Меньше оперативной памяти доступно, чем установлено на Centos 7 экспортировать переменные env из файла в make-файл Пакеты Egress не используют таблицу маршрутизации, отличную от дефолта Выполнить команду после каждой выходной строки из команды ping Нужно ли перезагружаться после обновления ядра (через APT)? Невозможно освободить кэшированную память ядра, даже сбросив кеши iptables от хоста к гостю вмешивается в vm-vm-связь Как заставить mdstat игнорировать указанные устройства Как написать скрипт OpenSuse, который изменит мой файл menu.lst загрузки и автоматически добавит «nomodeset» как к отказоустойчивому, так и к нормальному варианту загрузки? Что означает этот , начинающийся с многих строк во время экрана загрузки Linux? Параллельное выполнение программы по нескольким файлам Как скопировать каталог с только указанным типом файлов? Перенаправление всего IP-трафика через USB-порт на фиксированный адрес Невозможно воспроизвести музыку с помощью Banshee на Arch Linux

Хотите найти две строки подряд с не менее n символами

Я хотел бы использовать sed для поиска первой части текстового файла с последовательными строками с не менее чем n пробелами. Я хотел бы напечатать с первой из этих строк до конца файла.

Каков наилучший способ сформулировать это?

С sed это должно работать:

 n=5 sed -ne "/\([^[:blank:]].*\)\{$n\}/!d;h;n;//!d;x;p;x;:1" -e 'p;n;b1' 
 awk -vn=$n ' !p {line = $0; gsub(/[[:space:]]/, "")} !p && length($0) >= n && prev_is_long {p = 1; print prev} !p {prev = line; prev_is_long = (length($0) >= n)} p {print} ' file1 

Я знаю, что вы сказали sed (не каламбур), но если вы можете жить с PERL, следующее должно делать то, что вы хотите (n = 20):

 #!/usr/bin/perl -w my $n=20; ## The minimum length of the line my $prev=""; ## This holds the number of chars in the previous line my $pline; ## This holds the previous line my $pp=0; ## Counter, lines will be printed if set to 1 while(<>){ ## Skip line processing if we have already ## found our lines of interest $pp==1 && do {print; next}; ## Get non-space chars my $a=join("",/[^\s]+/g); ## Print if requirements are met. if (length($prev)> $n && length($a)> $n){ print $pline,$_; $pp=1; } $prev=$a; $pline=$_; } в #!/usr/bin/perl -w my $n=20; ## The minimum length of the line my $prev=""; ## This holds the number of chars in the previous line my $pline; ## This holds the previous line my $pp=0; ## Counter, lines will be printed if set to 1 while(<>){ ## Skip line processing if we have already ## found our lines of interest $pp==1 && do {print; next}; ## Get non-space chars my $a=join("",/[^\s]+/g); ## Print if requirements are met. if (length($prev)> $n && length($a)> $n){ print $pline,$_; $pp=1; } $prev=$a; $pline=$_; } 

Сохраните его как foo.pl и запустите так:

 $ perl foo.pl infile.txt