跳到主要内容

三剑客之查询过滤--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