Хочу искать две последовательных строки с, по крайней мере, n символы

Я предполагаю, что Ваше ТВ ожидает тот же протокол, который делает мой Xbox. Я передаю потоком к этому с ushare. Это легко настроить, но не поддерживает транскодирование, таким образом, медиа должны уже быть в формате, устройство может обработать

5
17.09.2012, 19:50
3 ответа

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

n=5
sed -ne "/\([^[:blank:]].*\)\{$n\}/!d;h;n;//!d;x;p;x;:1" -e 'p;n;b1'
3
27.01.2020, 20:39
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 
3
27.01.2020, 20:39
  • 1
    Это почти работает, но это кажется smoosh вместе словами первой показанной строки. –  dan 18.09.2012, 00:07
  • 2
    @dan, я думаю, что это должно сделать это. –  Gilles 'SO- stop being evil' 18.09.2012, 02:47

Я знаю, что Вы сказали, что 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=$_;
}

Сохраните его как foo.pl и работайте как так:

$ perl foo.pl infile.txt
0
27.01.2020, 20:39

Теги

Похожие вопросы