三剑客之查询过滤--grep
# 文本过滤工具,(模式:pattern)工具,按照行过滤
# -i 忽略大小写
# -o 仅显示匹配到的字符串本身
# --invert-match 显示不能被模式匹配的行
# -E 支持使用拓展正则表达式元字符
# -q --queit,--silent:静默模式,不输出任何信息
# -v 反转模式,匹配所有行,除了匹配模式行
# -n 显示匹配到的行号
# -c 显示匹配到的行数
1.找出有关root的行
grep "root" /etc/passed
2.找出root开头的行
grep '^root' /etc/passwd
3.匹配仅仅以root开头或者yu开头的行
grep -E '^(root|yu)\>' /etc/passwd
grep -E -w '^(root|yu)' /etc/passwd
# -E 启用拓展正则表达式
# \> 表示中止
# -w 精确匹配
4.过滤出bin开头的行,并显示行号
grep '^bin' -n /etc/passwd
5.过滤出除了root开头的行
grep '^root' -v -n /etc/passwd
6.统计root用户出现的次数
grep '^root' -c /etc/passwd
7.匹配root用户,最多两次
grep -m 2 'root' /etc/passwd
# -m max最大次数
8.匹配多文件,列出存在信息的文件名字
grep -l '^root' pwd.txt pwd2.txt pwd3.txt
# -l 仅显示文件路径
9.匹配/etc/passwd中不以/bin/bash结尾的行
grep -v '/bin/bash$' /etc/passwd
10.找出/etc/passwd文件中的仅含两位数或三位数的行
grep -E '\<[0-9]\{2,3\}\>' /etc/passwd
11.找出文件中,以至少一个空白字符开头,后面是非空字符的行
grep -E '^[[:space:]].*' love.txt
grep -E '^[[:space:]]+[^[:space:]]' love.txt
# .* 匹配所有字符
# [[:space:]] 空白字符
# [^[:space"]] 非空白字符
# + 一个或者多个
12.找出文件中所有大小写i开头的行
grep -i '^i' love.txt
grep '^[iI]' love.txt
grep -E '^(i|I)' love.txt
13.找出系统上root、yu、nobody用户信息
grep -E '\<(root|yu|nobody)\>' /etc/passwd
14.找出文件中所有的函数名
grep -E "[a-zA-z]+\(\)" -o /etc/init.d/function
grep -E "[[:alnum:]]+\(\)" -o /etc/init.d/function
# -o 仅打印匹配的字符
15.找出用户名和shell相同的用户
grep -E '^([^:]+\>).*\1$' /etc/passwd