grep
先放究极公式
grep -rni 'password\|passwd' -C3|grep -e php |grep 'username.*=>' -C3|less
搜索内容
格式及参数
格式及主要参数
grep [options]
主要参数: grep --help可查看
-r:目录循环搜索
-c:只输出匹配行的计数。
-i:不区分大小写。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
--color=auto :可以将找到的关键词部分加上颜色的显示。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
.:所有的单个字符。
*:所有字符,长度可以为0。注意是某一字符n个
输出调整
grep 后面带上-A -B -C 参数可以多显示几行内容
grep -A 5 可以显示匹配内容以及后面的5行内容
grep -B 5 可以显示匹配内容以及前面的5行内容
grep -C 5 可以显示匹配内容以及前后面的5行内容
合并搜索
文本条件匹配
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
例如:grep "abc\|xyz" testfile 表示过滤包含abc或xyz的行
egrep 'word1|word2' 文件名
grep -E 'word1|word2' 文件名
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
匹配目标文件类型
grep XXX |grep -e php
输出模式
输出到文件
grep XXX /PATH >> /OUTFILE
last查看
grep XXX /PATH | last
正则表达式
锚点
你可以分别使用 ^ 和 $ 符号来正则匹配输入行的开始或结尾。下面的例子搜索显示仅仅以 vivek 开始的输入行:
grep ^vivek /etc/passwd
输出例子:
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
你可以仅仅只搜索出以单词 vivek 开始的行,即不显示 vivekgit、vivekg 等(LCTT 译注:即该单词后面是空格、符号等英文的单词分隔符。)
grep -w ^vivek /etc/passwd
找出以单词 word 结尾的行:
grep 'foo$' 文件名
匹配仅仅只包含 foo 的行:
grep '^foo$' 文件名
如下所示的例子可以搜索空行:
grep '^$' 文件名
字符替换
匹配 Vivek 或 vivek:
grep '[vV]ivek' 文件名
或者
grep '[vV][iI][Vv][Ee][kK]' 文件名
也可以匹配数字 (即匹配 vivek1 或 Vivek2 等等):
grep -w '[vV]ivek[0-9]' 文件名
可以匹配两个数字字符(即 foo11、foo12 等):
grep 'foo[0-9][0-9]' 文件名
不仅仅局限于数字,也能匹配至少一个字母的:
grep '[A-Za-z]' 文件名
显示含有 “w” 或 “n” 字符的所有行:
grep [wn] 文件名
放在括号内的表达式,即包在 “[:” 和 “:]” 之间的字符类的名字,它表示的是属于此类的所有字符列表。标准的字符类名称如下:
[:alnum:]
- 字母数字字符
[:alpha:]
- 字母字符
[:blank:]
- 空字符: 空格键符 和 制表符
[:digit:]
- 数字: '0 1 2 3 4 5 6 7 8 9'
[:lower:]
- 小写字母: 'a b c d e f g h i j k l m n o p q r s t u v w x y z'
[:space:]
- 空格字符: 制表符、换行符、垂直制表符、换页符、回车符和空格键符
[:upper:]
- 大写字母: 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'
在这个例子所示的是匹配所有大写字母:
grep '[:upper:]' 文件名
通配符
你可以使用 “.” 来匹配单个字符。例子中匹配以 “b” 开头以 “t” 结尾的3个字符的单词:
grep '/<b.t/>' 文件名
在这儿,
匹配单词前面的空字符串
匹配单词后面的空字符串
打印出只有两个字符的所有行:
grep '^..$' 文件名
显示以一个点和一个数字开头的行:
grep '^/.[0-9]' 文件名 #注意这里的转义
注意 * 只能匹配某一个字符n次
[root@server ~]$ cat /ss
app/database.php-19- // 用户名
app/database.php-20- 'username' => 'www_honglian7001',
app/database.php-21- // 密码
app/database.php:22: 'password' => 'wxrM5GtNXk5k5EPX',
[root@server ~]$ grep -n "password.*=>" /ss
4:app/database.php:22: 'password' => 'wxrM5GtNXk5k5EPX',
[root@server ~]$ grep -n 'password*=>' /ss
[root@server ~]$ grep -n 'password.*=>' /ss
4:app/database.php:22: 'password' => 'wxrM5GtNXk5k5EPX',
[root@server ~]$