如何在grep中转义管道字符?

Dor*_*rra 4 shell grep escaping pipe

我有这种格式的文件:

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 |||
Run Code Online (Sandbox Code Playgroud)

我想搜索保存在两个变量中并由|||分隔的一对单词。我徒劳地尝试了许多替代方法,例如:

grep "$word1 ||| $word2 |||" $file
Run Code Online (Sandbox Code Playgroud)

我试图这样转义管道字符:

grep '$word1 \|\|\| $word2 \|\|\|' $file
Run Code Online (Sandbox Code Playgroud)

如何匹配文件中的管道?

Jos*_*lly 5

使用grep -F-变量将由外壳程序解释并替换为其各自的值,然后带引号的字符串(包括管道)将被解释为固定字符串。例:

$ 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 ||| 
Run Code Online (Sandbox Code Playgroud)