The UNIX and Linux Forums  


Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
google unix.com



De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
comment aller de pointeur de fichier à une ligne de c user_prady High Level Programming 7 03-27-2008 12:32 AM
retour de la ligne précédente user_prady De programmation et de script Shell 12 12-18-2007 07:37 AM
comment aller à la ligne précédente vim useless79 UNIX for Advanced & Expert Users 2 09-16-2007 09:10 AM
rechercher et d'extraire la ligne précédente dans le fichier paulsew De programmation et de script Shell 2 02-23-2007 08:04 AM
Jour précédent la date en Perl? rajus19 De programmation et de script Shell 4 07-18-2006 01:40 AM

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 Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 01-24-2008
tqlam tqlam is offline
Registered User
  
 

Date d'inscription: juillet 2004
Posts: 12
Perl comment déplacer le pointeur à la ligne dans un fichier txt?

J'ai un fichier texte qui a des blocs de texte. Chaque bloc commence par # # # et se termine avec End_ # # #.
J'ai écrit un perl script à la recherche d'une chaîne à partir de la ligne 2 (ignorer toutes les lignes commençant par # # #) de chaque bloc
si disponible, besoin d'imprimer l'ensemble de cette rue. Selon le fichier d'entrée ci-dessous, il sera imprimé blocs # 02, # 04, # 05.
Voici ma question, je n'ai pas de problèmes correspondant aux SEARCH_STR mais, une fois jumelés, comment puis-je retourner lignes précédentes?
par exemple dans le bloc n ° 02, correspondent à la ligne 3, mais j'ai besoin d'imprimer les lignes 1 et 2.

Merci d'avance pour toute aide!

Mon script:
\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d
#! / 46020/local/bin /perl -w
#
if ($ # ARGV! \u003d 0) (
print "Vous devez fournir un critère de recherche. \ n";
sortie;
)
my $ query \u003d $ ARGV [0];
my $ input \u003d "/ MyPath / inputFILE.txt";
my $ line;
my $ tag \u003d 0;
my @ results \u003d ();

open (FILE, "<$ INPUT") or die "Can't open '$ ENTREE' file: $!";
while ($ line \u003d <FILE>) (
next 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 (@ results, $ line) if ($ tag \u003d\u003d 1);
$ tag \u003d 0;
)
push (@ results, $ line) if ($ tag \u003d\u003d 1);
)
close (FILE);
print "@ results \ n";
sortie;


Inputfile:
\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d
# 01 - bloc de ligne de départ, ici
texte ici
plus de texte ici
plus de lignes
plus de lignes
plus de lignes
End_ # 01

# 02 - bloc de ligne de départ, ici
texte ici
Cette ligne contient les SEARCH_STR et quelque chose
plus de lignes
plus de lignes
End_ # 02

# 03 - bloc de ligne de départ, ici
texte ici
plus de texte ici
plus de lignes
plus de lignes
plus de lignes
End_ # 03

# 04 - bloc de ligne de départ, ici
texte ici
plus de lignes
plus de lignes
la SEARCH_STR est là et quelque chose
texte ici
plus de lignes
plus de lignes
plus de lignes
End_ # 04

# 05 - bloc de ligne de départ, ici
texte ici
plus de lignes
la SEARCH_STR est là et quelque chose
plus de lignes
End_ # 05


# 06 - bloc de ligne de départ, ici
texte ici
plus de texte ici
plus de lignes
plus de lignes
plus de lignes
End_ # 06
  #2 (permalink)  
Old 01-24-2008
Smiling Dragon's Avatar
Souriant Dragon Smiling Dragon is offline Forum Advisor  
Désordonné utilisateur
  
 

Join Date: Nov 2007
Lieu: Nouvelle-Zélande
Messages: 922
Post

Essayez quelque chose comme ceci:

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  
Registered User
  
 

Join Date: Jan 2008
Messages: 731
Si Smiling_Dragons suggestion ne fonctionne pas, vous pouvez utiliser le Tie:: File module qui vous permet de lire et d'écrire dans un fichier comme un perl array. Voir les Tie:: dossier de documentation pour l'utilisation de détails. Il s'agit également d'un module de base, vous devez donc avoir déjà installé. Si vous êtes coincé, après retour.
  #4 (permalink)  
Old 01-25-2008
tqlam tqlam is offline
Registered User
  
 

Date d'inscription: juillet 2004
Posts: 12
Tiens simplement à préciser, selon le inputFILE.txt, lorsque vous lancez le script avec la SEARC_STR il print # 02, # 04, # 05 pâtés de maisons. par exemple scriptname recherche.
Mon code en mesure d'imprimer les lignes suivantes correspondent plus à End_ # # #, mais j'ai besoin d'un moyen d'imprimer avant de pair dans ce bloc.

Merci.
  #5 (permalink)  
Old 01-25-2008
KevinADC KevinADC is offline Forum Advisor  
Registered User
  
 

Join Date: Jan 2008
Messages: 731
Oui, je pense que nous avons tous deux compris que cette exigence, et les deux suggestions peuvent être utilisés pour faire ce que vous voulez. Si vous êtes familier avec une boucle à travers perl tableaux en utilisant des indices: $ array [n], puis en utilisant Tie:: Le fichier sera assez simple une fois que vous avez lu la documentation.

S_M suggestion du lit le fichier en morceaux, et non pas ligne par ligne, et ressemble à cela devrait fonctionner même si le dernier match pourrait échouer s'il n'y a pas deux nouvelles lignes à la fin du fichier. Vous devrez l'essayer et voir ou peut-être qu'il est possible d'effacer cela.
  #6 (permalink)  
Old 01-27-2008
Smiling Dragon's Avatar
Souriant Dragon Smiling Dragon is offline Forum Advisor  
Désordonné utilisateur
  
 

Join Date: Nov 2007
Lieu: Nouvelle-Zélande
Messages: 922
Citation:
Posté par KevinADC View Post
S_M suggestion du lit le fichier en morceaux, et non pas ligne par ligne, et ressemble à cela devrait fonctionner même si le dernier match pourrait échouer s'il n'y a pas deux nouvelles lignes à la fin du fichier. Vous devrez l'essayer et voir ou peut-être qu'il est possible d'effacer cela.
Je pense que ce sera ok avec un fichier normal de résiliation - j'ai essayé sur un seul saut, et il attend bien, mais je somme a mis beaucoup de tests pour en assurer
Closed Thread

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 07:37 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0