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