Ma question est probablement simple mais je suis un débutant complet. Je souhaite rechercher le contenu de plusieurs fichiers texte pour une phrase particulière, puis afficher les lignes des trouvailles à l'écran. J'ai déjà appris à traiter avec un seul fichier. Par exemple, si je veux rechercher un mot, dites "ok" dans un fichier texte nommé "wyvern.txt" dans le répertoire racine de F. Le code suivant fonctionne: mais Que dois-je faire si je souhaite rechercher la même phrase dans deux fichiers texte, dites "wyvern 'et" casanova "respectivement? Ou comment de tous les fichiers du répertoire" romans "dans le répertoire racine de f. p > Toute aide serait grandement appréciée.
Merci d'avance p> Mike P> haha, j'ai finalement compris comment rechercher tous les fichiers d'un répertoire pour Un motif match :)
Le code suivant fonctionne bien: p>
7 Réponses :
Le moyen le plus simple consiste à énumérer les fichiers de la ligne de commande, puis utilisez simplement:
while (<>) { print if m/Okay/; }
Placez les fichiers dans A pour boucle ou quelque chose sur ces lignes:
I.e. P>
for $file ('F:\wyvern.txt','F:\casanova.txt') { open(TXT, $file); while($line = <txt>) { print "$line" if $line =~ /Okay/; } close TXT; }
@Lazy Bob, j'ai changé ($ Line =
Fichier :: Grep est ce dont vous avez besoin ici p>
La documentation du fichier :: grep est trop compacte pour ceux qui y sont nouveaux, connaissez-vous peut-être un tutoriel pour les débutants?
Extension de la bonne réponse fournie par Jonathan Leffler:
Le nom de fichier où le match a été trouvé est dans En outre, si vous avez une liste de noms de fichiers et qu'ils ne sont pas sur la ligne de commande, vous pouvez toujours obtenir le comportement magique $ argv code>, et avec un petit changement, le numéro de ligne est disponible dans
$. code>. Exemple: p>
argv code> . Regardez: P>
{
local @ARGV = ('one.txt', 'two.txt');
while (<>) {
print "$ARGV:$.:$_" if /Okay/;
} continue {
close ARGV if eof;
}
}
Merci Hobbs! Le code fonctionne parfaitement et maintenant je peux rechercher plusieurs fichiers pour une chaîne spécifiée :) ---------------- #! / USR / bin / perl {local @argv = ('F: \ wyvern.txt ',' f: \ casanova.txt '); tandis que (<>) {imprimé "$ argv: $.: $ _" if / ok /; } continuer {proches argv si eof; }} ---------------------------- Que dois-je faire si je souhaite rechercher tous les fichiers d'un répertoire spécifié, disons "romans" dans le conduire f?
Regardez glob () code> pour obtenir des fichiers dans un répertoire et
Fichier :: Rechercher :: Object code> ou
Fichier :: Trouver :: règle code> à Trouvez des fichiers dans les sous-répertoires.
Merci, Hobbs! Les choses semblent être intéressantes pour un débutant comme moi :)
D'accord, je suis un Dummie complet. Mais pour résumer, je peux maintenant rechercher un seul fichier texte ou plusieurs fichiers texte pour une chaîne spécifiée. J'essaie toujours de déterminer comment faire face à tous les fichiers d'un dossier. Les codes suivants fonctionnent.
#!/usr/bin/perl { local @ARGV = ('F:\wyvern.txt', 'F:\casanova.txt'); while (<>) { print "$ARGV:$.:$_" if /Okay/; } continue { close ARGV if eof; } }
Sur un système où les arguments de ligne de commande sont correctement développés, vous pouvez utiliser:
C:\Temp> for %f in (*.txt) do perl -ne "print if /perl/" %f
Comment puis-je utiliser le code Perl Windows et écrire la sortie dans un fichier texte à la base du terminal? ... et merci pour ce code très utile.
juste un eweak sur votre ligne: voir Perldoc Glob pour plus. P>
glob code> - il fonctionne la même dans ce contexte et évite Les chances de confondre les nombreuses utilisations différentes des tranches d'angle dans Perl. IE: P>
@files = glob "F: / romans / *"; code> p>
Avez-vous vraiment besoin que cela soit à Perl? Vous pouvez utiliser Google Comment utiliser Grep pour cela si vous êtes sur un système d'exploitation UNIX.
Je ne pense pas qu'ils sont, étant donné le chemin dans
$ dossier code>