Com sed, isso deve funcionar:
n=5
sed -ne "/\([^[:blank:]].*\)\{$n\}/!d;h;n;//!d;x;p;x;:1" -e 'p;n;b1'
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?
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
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
Tags sed