想要搜索至少包含 n 个字符的连续两行

想要搜索至少包含 n 个字符的连续两行

我想使用 sed 搜索文本文件的第一部分,其中连续行至少包含n非空格字符。我想从这些行的第一行打印到文件的末尾。

表述这个问题的最佳方法是什么?

答案1

使用 sed,这应该可以工作:

n=5
sed -ne "/\([^[:blank:]].*\)\{$n\}/!d;h;n;//!d;x;p;x;:1" -e 'p;n;b1'

答案2

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

我知道你说的是 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

相关内容