The UNIX and Linux Forums  
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.

Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 01-24-2008
tqlam tqlam is offline
Registrert bruker
  
 

Bli Dato: juli 2004
Innlegg: 12
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
  #2 (permalink)  
Old 01-24-2008
Smiling Dragon's Avatar
Smiling Dragon Smiling Dragon is offline Forum Advisor  
Disorganised User
  
 

Bli Dato: november 2007
Sted: New Zealand
Innlegg: 922
Post

Prøv noe som dette:
Code:
#!/46020/local/bin/perl -w
$/="\n\n";
while (<STDIN>) { if (/$ARGV[0]/) { print $_ }}
. / scriptname.pl SEARCH_STR </ mypath / inputFILE.txt
  #3 (permalink)  
Old 01-24-2008
KevinADC KevinADC is offline Forum Advisor  
Registrert bruker
  
 

Bli Date: Jan 2008
Innlegg: 731
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.
  #4 (permalink)  
Old 01-25-2008
tqlam tqlam is offline
Registrert bruker
  
 

Bli Dato: juli 2004
Innlegg: 12
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.
  #5 (permalink)  
Old 01-25-2008
KevinADC KevinADC is offline Forum Advisor  
Registrert bruker
  
 

Bli Date: Jan 2008
Innlegg: 731
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.
  #6 (permalink)  
Old 01-27-2008
Smiling Dragon's Avatar
Smiling Dragon Smiling Dragon is offline Forum Advisor  
Disorganised User
  
 

Bli Dato: november 2007
Sted: New Zealand
Innlegg: 922
Sitat:
Originally Posted by KevinADC View Post
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.
Jeg tror det vil være ok med en vanlig fil oppsigelse - Jeg prøvde det på en enkelt linje, og det alright men jeg havn't lagt mye testing i den sikkert
Closed Thread

Hugseliste

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 07:26.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0