GNU/Linux >> Tutoriels Linux >  >> Linux

Lire des modèles Grep à partir d'un fichier ?

J'ai quelques gros fichiers texte et dans le fichier UNIQS.txt J'ai une liste de chaînes à grep d'un autre fichier. Le code que j'utilise est

grep -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam

qui ne fait rien - le fichier généré est vide. Mais quand je le fais

grep -F -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam

cela fonctionne correctement. Cela me déroute parce que je ne pensais pas grep interpréterait les entrées dans UNIQS.txt comme modèles d'expression régulière sans guillemets ni barres obliques et ainsi de suite dans le fichier (ce qui n'est pas le cas). Est-ce le cas en général que si vous récupérez les modèles à partir d'un fichier, il pensera automatiquement qu'il s'agit de modèles d'expression régulière ?

Modifier : Dans le UNIQS.txt fichier, il y a des chaînes séparées par des retours à la ligne de la forme

HWI-ST365:215:D0GH0ACXX:2:1101:10034:186783

(appelés noms de modèles) et le fichier EEP_VSL... colonnes séparées par des tabulations, avec environ 14 colonnes et la première colonne est le nom du modèle, donc je veux fondamentalement extraire la ligne correspondant à chaque modèle dans le fichier.

Réponse acceptée :

Le -f L'option spécifie un fichier dans lequel grep lit les modèles. C'est comme passer des modèles sur la ligne de commande (avec le -e option s'il y en a plusieurs), sauf que lorsque vous appelez depuis un shell, vous devrez peut-être citer le modèle pour protéger les caractères spéciaux qu'il contient d'être développés par le shell.

L'argument -E ou -F ou -P , le cas échéant, indique à grep dans quelle syntaxe les modèles sont écrits. Sans argument, grep attend des expressions régulières de base ; avec -E , grep attend des expressions régulières étendues ; avec -P (si pris en charge), grep attend des expressions régulières Perl; et avec -F , grep attend des chaînes littérales. Que les modèles proviennent de la ligne de commande ou d'un fichier n'a pas d'importance.

Notez que les chaînes sont des sous-chaînes :si vous passez a+b comme motif puis une ligne contenant a+b+c est assorti. Si vous souhaitez rechercher des lignes contenant exactement une des chaînes fournies et pas plus, passez le -x option.


Linux
  1. Comment "grep" un flux continu ?

  2. Comment créer un fichier sous Linux à partir de la fenêtre du terminal ?

  3. grep une grande liste contre un gros fichier

  4. Comment retrouver des mots d'un fichier dans un autre fichier ?

  5. Comment grep \n dans le fichier

Comment trouver une chaîne dans un fichier sous Linux

Comment extraire des adresses e-mail d'un fichier texte sous Linux

Commande grep Linux

Lecture d'un fichier en assembleur

Lecture d'un fichier CSV avec des requêtes SQL à partir du shell Linux

grep paires de motifs et fichier