sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #25703
Re: udskrive udsnit af tekstfil.
On Wed, 02 Aug 2000, you wrote:
> Jeg har en temmelig lang tekstfil, som jeg ønsker at kunne
> søge i.
>
> Data i filen står i blokke, som er adskilt af blanke linier.
> Alle linier undtagen den første i hver blok er indrykket med blanktegn.
> De fleste blokke indeholder kun et par linier tekst, og normalt
> søger jeg efter tekst, som står i starten af en blok, så
> hidtil har jeg klaret mig med grep -A 10 "^tekst" datafil.txt
>
> For at afgrænse til at udskrive en blok har jeg prøvet følgende:
> grep -A 100 "^tekst" datafil.txt | grep -v -A 100 "^[[:space:]]*$"
>
> Er det virkelig ikke muligt at få grep til at skrive alle
> linier imellem to matches? Eller er det bare mig, som ikke
> har set lyset?
>
UNDSKYLD - jeg sender denne igen, da jeg lavede en typo!
Perl, selvfølgelig!
Her er et hint:
open <FILE>, $file or die "kunne ikke åbne $file: $!\n";
# sæt record seperator til blank linie,
# virker kun hvis der ikke er blanke tegn ([\s\t\0] på blanke linier.
$/ = \n\n;
# find en post der starter med $text
@found = grep { /^$tekst/} <FILE>;
close FILE;
# udskriv til STDOUT
print shift @found;
(Sidste linie: $found -> @found)
$file kan erstattes med "filnavn", $tekst med <hvad det nu er>, men du burde
jo lave et lille program...
Eller bruge perl -e:
[anders@localhost anders]$ perl -e '
> open FILE, "test.pl";
> $/ = "\n\n";
> @r = grep { /perl/ } <FILE>;
> close FILE;
> print shift @r;'
#!/usr/bin/perl -w
[anders@localhost anders]$
-anders
Follow ups
References