在Unix中用于特殊字符的grep
我有一个日志文件(application.log),它可能在多行中包含以下string的常规和特殊字符:
*^%Q&$*&^@$&*!^@$*&^&^*&^& 我想search包含这个特殊string的行号。
 grep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log 
上述命令不会返回任何结果。
什么是正确的语法来获得行号?
 告诉grep使用-F选项将input视为固定string。 
 grep -F '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log 
 选项-n需要获得行号, 
 grep -Fn '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log 
那个为我工作的人是:
 grep -e '->' 
-e表示下一个参数是模式,不会被解释为参数。
来自: http : //www.linuxquestions.org/questions/programming-9/how-to-grep-for-string-769460/
相关的说明
 要grep回车,即\r字符,或0x0d ,我们可以这样做: 
 grep -F $'\r' application.log 
 或者,使用printf或echo来实现POSIX兼容性 
 grep -F "$(printf '\r')" application.log 
 而且我们可以使用hexdump ,或者less来查看结果: 
 $ printf "a\rb" | grep -F $'\r' | hexdump -c 0000000 a \rb \n 
 有关使用$'\r'和其他支持的字符,请参阅Bash手册> ANSI-C引用 : 
$'string'forms的单词被专门处理。 字扩展为string,反斜杠转义字符被ANSI C标准指定
 grep -n "\*\^\%\Q\&\$\&\^\@\$\&\!\^\@\$\&\^\&\^\&\^\&" test.log 1:*^%Q&$&^@$&!^@$&^&^&^& 8:*^%Q&$&^@$&!^@$&^&^&^& 14:*^%Q&$&^@$&!^@$&^&^&^& 
 您可以尝试删除任何字母数字字符和空格。 然后使用-n会给你的行号。 尝试以下方法 
 grep -vn "^[a-zA-Z0-9 ]*$" application.log 
用-b选项尝试vi,这将显示特殊的行尾字符(我通常使用它来查看unix操作系统上的txt文件中的窗口行尾)
但是如果你想要一个脚本化的解决scheme显然vi不会工作,所以你可以用grep试试-f或者-e选项,并把结果input到sed或者awk中。 从grep手册页:
匹配器select-E,–extended-regexp将PATTERN解释为扩展正则expression式(ERE,见下文)。 (-E由POSIX指定)
  -F, --fixed-strings Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified by POSIX.)