2014-05-21 7 views
2

Je dispose d'un fichier dans ce format:comment échapper le caractère pipe dans grep?

coupait ||| eastern ||| 0.045454545454545456 2.718 ||| 0-0 ||| 
instaurer ||| characteristic ||| 5.797101449275362E-4 2.718 ||| 0-0 ||| 
tiendrait ||| fails ||| 0.005 2.718 ||| 0-0 ||| 

et je voudrais rechercher une paire de mots qui sont enregistrés dans deux variables et qui sont séparées par |||. J'ai essayé beaucoup d'alternatives en vain comme:

grep "$word1 ||| $word2 |||" $file 

J'ai essayé d'échapper aux tuyaux personnages comme celui-ci:

grep '$word1 \|\|\| $word2 \|\|\|' $file 

Comment puis-je correspondre à la conduite dans le fichier?

Répondre

4

Utilisez grep -F - les variables seront interprétées par le shell et remplacées par leurs valeurs respectives, la chaîne entre guillemets (y compris les tuyaux) sera interprétée comme une chaîne fixe. Exemple:

$ cat file.txt 
coupait ||| eastern ||| 0.045454545454545456 2.718 ||| 0-0 ||| 
instaurer ||| characteristic ||| 5.797101449275362E-4 2.718 ||| 0-0 ||| 
tiendrait ||| fails ||| 0.005 2.718 ||| 0-0 ||| 
$ word1=coupait 
$ word2=eastern 
$ grep -F "$word1 ||| $word2 |||" file.txt 
coupait ||| eastern ||| 0.045454545454545456 2.718 ||| 0-0 ||| 
+0

Mettre le terme de recherche dans Quotes fonctionnait pour moi. Merci. –

Questions connexes