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.