Deseja procurar por duas linhas consecutivas com pelo menos n caracteres

5

Gostaria de usar sed para pesquisar a primeira parte de um arquivo de texto com linhas consecutivas com pelo menos n caracteres não espaciais. Gostaria de imprimir da primeira dessas linhas até o final do arquivo.

Qual é a melhor maneira de formular isso?

    
por dan 17.09.2012 / 18:50

3 respostas

3

Com sed, isso deve funcionar:

n=5
sed -ne "/\([^[:blank:]].*\)\{$n\}/!d;h;n;//!d;x;p;x;:1" -e 'p;n;b1'
    
por 17.09.2012 / 23:21
3
awk -v n=$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 
    
por 17.09.2012 / 22:31
0

Eu sei que você disse sed (sem trocadilhos) mas se você pode viver com PERL, o seguinte deve fazer o que quiser (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=$_;
}

Salve-o como foo.pl e execute da seguinte forma:

$ perl foo.pl infile.txt
    
por 17.09.2012 / 20:04

Tags