n
sedを使用して、連続した行に少なくとも空白以外の文字を含むテキストファイルの最初の部分を検索したいと思います。この行の最初の行からファイルの終わりまで印刷したいと思います。
この質問を表現する最良の方法は何ですか?
答え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