Decron Skrevet 18. oktober 2004 Del Skrevet 18. oktober 2004 Hei! Hvordan kan jeg få ut linjenummeret til et valgt søkeord i en fil? Feks hvis jeg vil ha ut linjenummeret til DocumentRoot i httpd.conf Det skal vel være ganske enkelt? ;-) Lenke til kommentar
benlen Skrevet 18. oktober 2004 Del Skrevet 18. oktober 2004 Ja du kunne nok klart dette selv med litt søking. selv har jeg bare hatt 2 forelesninger i PERL. Men det var god trening for meg så her er hvordan jeg løste det open (FIL, "/bane/httpd.conf") or die "kan ikke åpne filen\n"; while ($line = <FIL>) { $i++; if ($line =~ DocumentRoot) { print "$i\n" }; } close(FIL); Lenke til kommentar
Torbjørn Skrevet 25. oktober 2004 Del Skrevet 25. oktober 2004 (endret) perl -ne 'print $.,"\n" if /DocumentRoot/' /etc/httpd/conf/httpd.conf EDIT: skriveleif, s/httpc/httpd/ Endret 5. november 2004 av Torbjørn Lenke til kommentar
mysjkin Skrevet 5. november 2004 Del Skrevet 5. november 2004 Forklaring: Variablen $. viser hvilken linje du er på (hvor linje kan defineres på forskjellige vis) i filen du leser inn.. Perl har en god del spesialvariabler som kan gjøre ting enklere. http://www.perl.com/pub/a/2004/06/18/variables.html, eller finn perlvar under http://www.perldoc.com/ (siden kommer ikke opp nå, så jeg kan ikke gi en direkte link) For å skrive Torbjørns one-liner som et program: open (FIL, "/bane/httpd.conf") or die "kan ikke åpne filen\n"; while ($line = <FIL>) { if ($line =~ DocumentRoot) { print "$.\n" }; } perl closer automagisk, så jeg slettet den. Kan også bruke variablen $_ som er den siste linjen lest, dersom du ikke ber om noe annet, så da blir det: open (FIL, "/bane/httpd.conf") or die "kan ikke åpne filen\n"; while (<FIL>) { if (/DocumentRoot/) { print "$_\n" }; # Matcher mot $_ } Du kan også sette en variabel, $\ som er det som printes etter det du printer (om noen forsto det..) print bruker også $_ om du ikke ber den om noe annet, så vi kan si: $\="\n" open (FIL, "/bane/httpd.conf") or die "kan ikke åpne filen\n"; while (<FIL>) { if (/DocumentRoot/) {print}; } Eller enda mer perlsk, når du har en if for en enkel kommando, sett kommandoen først: $\="\n" open (FIL, "/bane/httpd.conf") or die "kan ikke åpne filen\n"; while (<FIL>) { print if (/DocumentRoot/); } M. (Ikke så lett å stoppe når jeg kommer i gang) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå