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)
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/
为了回车,即\r角色,或者0x0d,我们可以这样做:
grep -F $'\r' application.log
Run Code Online (Sandbox Code Playgroud)
或者,使用printf或echo用于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标准指定的反斜杠转义字符