![]() |
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Rules | Lenker | Album | FAQ | Medlemsliste | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her. |
Mer UNIX og Linux Forum Emner Du kan finne nyttig
|
||||
| Tråd | Tråd startet | Forum | Svar | Siste innlegg |
| Slik flytter du filen peker til en bestemt linje i c | user_prady | High Level Programmering | 7 | 03-27-2008 12:32 |
| tilbake forrige linje | user_prady | Shell programmering og Skripting | 12 | 12-18-2007 07:37 |
| Hvordan går forrige linje i vim | useless79 | UNIX for Advanced & ekspertbrukere | 2 | 09-16-2007 08:10 |
| søk og hente forrige linje i filen | paulsew | Shell programmering og Skripting | 2 | 02-23-2007 08:04 |
| Forrige dags dato i Perl? | rajus19 | Shell programmering og Skripting | 4 | 07-18-2006 12:40 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
Perl hvordan du flytter markøren til forrige linje i en txt-fil?
Jeg har en tekstfil som har tekstblokker. Hver blokk starter med # # # og slutter med End_ # # #.
Jeg skrev en perl skript for å søke en streng fra linje 2 (ignorere alle linjer starter med # # #) for hver blokk hvis matchet trenger å skrive hele blokken. Ifølge inndatafilen i nedenfor, vil det ut blokker # 02, # 04, # 05. Her er spørsmålet mitt, jeg har ingen problemer matche SEARCH_STR, men når matchet, hvordan flytter jeg tilbake forrige linjer? f.eks i blokk # 02, matchet i linje 3, men jeg trenger å skrive ut linje 1 og 2. Takk på forhånd for hjelp! MY SCRIPT: \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d #! / 46020/local/bin /perl -w # if ($ # argv! \u003d 0) ( print "Du må oppgi et søkekriterier. \ n"; exit; ) my $ query \u003d $ argv [0]; my $ input \u003d "/ mypath / inputFILE.txt"; my $ linje; my $ tag \u003d 0; my @ resultater \u003d (); open (FIL, "<$ INPUT") or die "Kan ikke åpne '$ INPUT' file: $!"; while ($ linje \u003d <fil>) ( next if ($ linje \u003d ~ / # ^ [0-9] [0-9] .* - / | | $ line \u003d ~ / ^ \ s *$/); if ($ linje \u003d ~ / $ query / i) ( $ tag \u003d 1; ) if ($ linje \u003d ~ / ^ End_ # / & & $ tag \u003d\u003d 1) ( push (@ resultater, $ line) if ($ kode \u003d\u003d 1); $ tag \u003d 0; ) push (@ resultater, $ line) if ($ kode \u003d\u003d 1); ) close (FIL); print "@ resultater \ n"; exit; Inndatafil: \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d # 01 - blokk startlinja her tekst her mer tekst her flere linjer flere linjer flere linjer End_ # 01 # 02 - blokk startlinja her tekst her denne linjen inneholder SEARCH_STR og noe flere linjer flere linjer End_ # 02 # 03 - blokk startlinja her tekst her mer tekst her flere linjer flere linjer flere linjer End_ # 03 # 04 - blokk startlinja her tekst her flere linjer flere linjer det SEARCH_STR er her og noe tekst her flere linjer flere linjer flere linjer End_ # 04 # 05 - blokk startlinja her tekst her flere linjer det SEARCH_STR er her og noe flere linjer End_ # 05 # 06 - blokk startlinja her tekst her mer tekst her flere linjer flere linjer flere linjer End_ # 06 |
|
||||
|
Hvis Smiling_Dragons forslaget ikke fungerer, kan du bruke Tie:: File modul som lar deg lese og skrive til en fil, akkurat som en perl array. Se Tie:: File dokumentasjonen for bruk detaljer. Det er også en kjerne modul så du bør ha den installert allerede. Hvis du får problemer, legger tilbake.
|
|
||||
|
Vil bare avklare, ifølge inputFILE.txt da kjøre skriptet med SEARC_STR vil det ut # 02, # 04, # 05 blokker. f.eks scriptname søk.
Min kode kunne skrive ut matchet pluss følgende linjer opp til End_ # # #, men jeg trenger en måte å skrive ut linjer før matchet i denne blokken. Takk. |
|
||||
|
Ja, jeg tror vi begge skjønte at kravet, og begge forslag kan brukes til å gjøre hva du vil. Hvis du er kjent med looper gjennom perl Arrays bruker subscripts: $ array [n] deretter bruke Tie:: File vil være ganske rett frem når du leser dokumentasjonen.
S_M forslag leser filen i biter, ikke linje for linje, og ser ut som det skal fungere selv om den siste kampen mislykkes hvis det ikke er to linjeskift på slutten av filen. Du må prøve det og se, eller kanskje han kan klare det opp. |
![]() |
| Hugseliste |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|