Unix Grep或操作员不工作

Unix Grep或操作员不工作,unix,grep,operator-keyword,Unix,Grep,Operator Keyword,我需要Unix方面的帮助。 我试图查看两条语句(printf和fprintf)中是否有一条在文件中。我使用命令: search=`cat $file | grep -w "fprintf\|printf"` 出于某种原因,在存在这两个文件中的任何一个的文件中都找不到。为什么? grep -w "fprintf\|printf" $file 这个在我的壳里很好用。不过,以下是一些备选方案: egrep -w 'fprintf|printf' $file grep -wE 'fprintf|pr

我需要Unix方面的帮助。 我试图查看两条语句(printf和fprintf)中是否有一条在文件中。我使用命令:

search=`cat $file | grep -w "fprintf\|printf"`
出于某种原因,在存在这两个文件中的任何一个的文件中都找不到。为什么?

grep -w "fprintf\|printf" $file
这个在我的壳里很好用。不过,以下是一些备选方案:

egrep -w 'fprintf|printf' $file
grep -wE 'fprintf|printf' $file
grep -we 'fprintf\|printf' $file
你有两个问题

首先,不支持
|
操作符。您需要使用
egrep
-E
标志

其次,在双引号内,
\\\\\\\\\\\\\\\\\\\\\\\\\\\\
表示
\\\\\\\\\\\\\\\\\\\
。反斜杠传递给
grep
命令,因此即使
grep
理解了
|
运算符,反斜杠也会将其转换为普通字符

试试这个:

search=`cat $file | egrep -w "fprintf|printf"`
或者,您可以将每个备选方案作为单独的参数提供给
grep

search=`cat $file | grep -w -e fprintf -e printf

为什么不去掉单词regexp标志,
-w
?-请注意,您应该使用
search=$(grep-w-E-E“f?printf”$文件)
或类似的工具,而不是浪费时间使用
cat
和pipe.GNU grep支持它。谢谢!我对Unix还是个新手。如果他使用的是GNU grep,他的命令就会匹配。标准
grep
处理
\\\\\
的方式与
egrep
处理
的方式不同。