grep for Unix中的特殊字符

Avi*_*nee 82 unix search grep special-characters

我有一个日志文件(application.log),它可能在多行中包含以下正常和特殊字符串:

*^%Q&$*&^@$&*!^@$*&^&^*&^&
Run Code Online (Sandbox Code Playgroud)

我想搜索包含此特殊字符串的行号.

grep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
Run Code Online (Sandbox Code Playgroud)

上面的命令不会返回任何结果.

获取行号的正确语法是什么?

Pri*_*ley 143

告诉grep您使用-F选项将输入视为固定字符串.

grep -F '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
Run Code Online (Sandbox Code Playgroud)

-n获取行号需要选项,

grep -Fn '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
Run Code Online (Sandbox Code Playgroud)

  • 根据你的grep版本,你只需要转义(使用反斜杠)`^`,`$`,`.`,`*`和`\`.或者你也可以试试`fgrep`. (7认同)
  • @NahuelFouilleul:+1.顺便说一下,`fgrep`与`grep -F`相同. (2认同)

Tom*_*ito 79

对我有用的是:

grep -e '->'
Run Code Online (Sandbox Code Playgroud)

-e表示下一个参数是模式,不会被解释为参数.

来自:http://www.linuxquestions.org/questions/programming-9/how-to-grep-for-string-769460/

  • 这应该是公认的答案 - 简单且适用于 grep (2认同)
  • 在搜索包含“-”字符的字符串时,尝试过 -F 和 fgrep 对我不起作用。这有效。 (2认同)

rye*_*nus 6

相关说明

为了回车,即\r角色,或者0x0d,我们可以这样做:

grep -F $'\r' application.log
Run Code Online (Sandbox Code Playgroud)

或者,使用printfecho用于POSIX兼容性

grep -F "$(printf '\r')" application.log
Run Code Online (Sandbox Code Playgroud)

我们可以使用hexdump,或less看到的结果:

$ printf "a\rb" | grep -F $'\r' | hexdump -c
0000000   a  \r   b  \n
Run Code Online (Sandbox Code Playgroud)

关于使用$'\r'和其他受支持的字符,请参阅Bash手册> ANSI-C引用:

$'string'形式的单词是专门处理的.单词扩展为字符串,替换为ANSI C标准指定的反斜杠转义字符