![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui. |
Più di UNIX e Linux Forum Argomenti potreste trovare utili
|
||||
| Filo | Thread Starter | Forum | Risposte | Ultimo Post |
| come spostare il puntatore del file a una particolare linea di c | user_prady | Di programmazione ad alto livello | 7 | 03-27-2008 12:32 AM |
| restituire la riga precedente | user_prady | Shell scripting e di programmazione | 12 | 12-18-2007 07:37 AM |
| come andare riga precedente in vim | useless79 | UNIX e avanzata per utenti esperti | 2 | 09-16-2007 09:10 AM |
| ricerca e recuperare riga precedente nel file | paulsew | Shell scripting e di programmazione | 2 | 02-23-2007 08:04 AM |
| Giorno precedente la data del giorno in Perl? | rajus19 | Shell scripting e di programmazione | 4 | 07-18-2006 01:40 AM |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread | Rate Thread | Modalità di visualizzazione |
|
|
|
||||
|
Perl come spostare il puntatore alla riga precedente in un file txt?
Ho un file di testo che ha blocchi di testo. Ogni blocco inizia con # # # e termina con End_ # # #.
Ho scritto un perl script per cercare una stringa da linea 2 (ignorare ogni riga inizia con # # #) di ciascun blocco se trovato, che la necessità di stampare tutto il blocco. Secondo il file di input di seguito, verrà stampata blocchi # 02, # 04, # 05. Ecco la mia domanda, non ho problemi SEARCH_STR la corrispondenza, ma una volta trovato, come faccio a spostare indietro precedenti linee? ad esempio nel blocco # 02, in corrispondenza della linea 3, ma ho bisogno per stampare le linee 1 e 2. Grazie in anticipo per qualsiasi aiuto! IL MIO PROGRAMMA: \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d #! / 46020/local/bin /perl -w # if ($ # ARGV! \u003d 0) ( print "È necessario fornire un criterio di ricerca. \ n"; uscita; ) my $ query \u003d $ ARGV [0]; my $ INPUT \u003d "/ mypath / inputFILE.txt"; my $ line; my $ tag \u003d 0; my @ results \u003d (); open (FILE, "<$ INPUT") o morire "Impossibile aprire '$ INPUT' file: $!"; while ($ line \u003d <FILE>) ( prossimo if ($ line \u003d ~ / ^ # [0-9] [0-9] .* - / | | $ line \u003d ~ / ^ \ s *$/); if ($ line \u003d ~ / $ query / i) ( tag \u003d $ 1; ) if ($ line \u003d ~ / ^ End_ # / & & $ tag \u003d\u003d 1) ( push (@ risultati, $ line) if ($ tag \u003d\u003d 1); $ tag \u003d 0; ) push (@ risultati, $ line) if ($ tag \u003d\u003d 1); ) close (FILE); print "@ risultati \ n"; uscita; Input: \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d # 01 - blocco linea qui il vostro testo qui più qui il testo di più linee di più linee di più linee End_ # 01 # 02 - blocco linea qui il vostro testo qui questa linea contiene il SEARCH_STR e qualcosa di più linee di più linee End_ # 02 # 03 - blocco linea qui il vostro testo qui più qui il testo di più linee di più linee di più linee End_ # 03 # 04 - blocco linea qui il vostro testo qui di più linee di più linee il SEARCH_STR è qui e qualcosa il vostro testo qui di più linee di più linee di più linee End_ # 04 # 05 - blocco linea qui il vostro testo qui di più linee il SEARCH_STR è qui e qualcosa di più linee End_ # 05 # 06 - blocco linea qui il vostro testo qui più qui il testo di più linee di più linee di più linee End_ # 06 |
|
||||
|
Se Smiling_Dragons suggerimento non funziona, è possibile utilizzare il Tie:: File modulo, che vi permette di leggere e scrivere in un file solo come un perl array. Vedi la Tie:: File di documentazione per l'uso dettagli. E 'anche un modulo di base in modo che si deve avere già installato. Se si blocca, post indietro.
|
|
||||
|
Just desidera chiarire, secondo la inputFILE.txt, quando viene eseguito lo script con il SEARC_STR verrà stampata # 02, # 04, # 05 blocchi. ad esempio scriptname ricerca.
Il mio codice in grado di stampare ha trovato più le seguenti linee fino a End_ # # #, ma ho bisogno di un modo per stampare le linee prima che ha trovato in questo blocco. Grazie. |
|
||||
|
Sì, credo che sia comprensibile tale obbligo, e che entrambi i suggerimenti possono essere usati per fare ciò che volete. Se sei a conoscenza attraverso il looping perl pedici utilizzando array: $ array [n] usando poi Tie:: File sarà piuttosto semplice: una volta di leggere la documentazione.
S_M suggerimento della legge il file in pezzetti, non linea per linea, e si presenta come dovrebbe funzionare anche se l'ultima partita potrebbe non riuscire se non c'è due a capo alla fine del file. Dovrete cercare e vedere o forse si può precisare che fino. |
![]() |
| Segnalibri |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|