linux shell命令之 grep

grep 命令
1. grep "hello world" filename ---》 grep certificate 00.pem
2. grep 支持多文件查询 grep Certificate 00.pem 08.pem
3. grep -c 选项,表示输出匹配字符串行的数量 grep -c Certificate *.pem
4. grep -n选项, 表示列出所有的匹配行, 并显示行号 grep -n Certificate *.pem
5. grep -v 选行, 选项列出不包含模式的所有行, grep -vc Certificate *.pem ,列出不含Certificate字符串的所有行
6. grep -i 选项 忽略大小写, grep -i certificate 00.pem
7 grep -h 选项, 在查询时,不在显示文件的名字 grep -h Certificate *.pem (输出结果不再显示.pem结尾的文件名了)
8 grep -l 选项, 只列出符合匹配的文件名 grep -l Certificate * (结果为00. pem, 08.pem , 11.pem)
9. grep -s 选项 表示不显示不存在或者无匹配文件的错误信息
10. grep -r 选项,表示递归搜索
11. grep -w 和-x, 表示 grep -w cer* 00.pem (此时*不再表示通配符) grep -w 'World' world.txt , 将包含World单词的文本行输出。 grep -x 'World' world.txt , 将只包含 'World'这一行输出
12 greo -q, 将结果返回, 如grep -q -x 'World' world.txt 的结果放到$? 里面, echo $? 即可
13. grep -b -o : grep -b -w 'World' world.txt 打印匹配行跟头部的偏移量 。 grep -b -o -w 'World' world.txt 打印匹配词距文件头部的偏移量


grep 与正则表达式结合的例子

查找以-符号开头的行: grep ^- *.pem
搜索空白行 grep -c ^$ 00.pem
搜索非空白行数 grep -c ^[^$] 00.pem
grep ^/..../ 00.pem: 表示文件中以/字符开始, 中间4个任意字符, 第6个字符仍为/的行, 显示结果如/home/满足匹配
grep ^_*B, 表示以_开头, 重复_很多次, 然后是B字符的行, 如_____B
grep 'seu.edu.cn' 00.pem 将出现问题 , 结果seuxeduxcn这种也符合情况, 应改为 grep 'seu\.edu.\cn' 00.pem

横杠“-”字符比较特别, 它虽然不属于正则表达式元字符,但是“-”字符是引出grep 命令选项的特殊字符, 所以当模式“-”开头时,需要转义符将其转义,如下:
grep -\{5\} 00.pem 错误
grep '-\{5\}' 00.pem 错误
grep \-\{5,\} 00.pem 错误
grep '\-\{5,\}' 00.pem 正确

POSIX字符类
[:upper:] [A~Z]
[:lower:] [a~z]
[:digit:] [0~9]
[:alnum:] [0~9a~zA~Z]
[:space:] 空格或者Tab
[:alpha:] [a~zA~Z]
[:cntrl:] 表示Ctrl键
[:graph:]或[:print:] 表示ASCII码, 33~126之间的字符
[:xdigit:] 表示16进制数字[0~9A~Fa~f]


grep ^[[:upper:]] 00.pem 搜索以大写字母开头的行
grep ^[[:space:]] 00.pem 搜索以空格开头的行

精确匹配有两种方式 grep -w the 00.pem ===> grep \<the\> 00.pem

或字符| 需要加上-E才可以支持, 如grep -E "OU|seu" 00.pem

egrep 等价于 grep -E 如 egrep "OU|seu" 00.pem
fgrep 等价于 grep -F , fgrep不支持正则表达式,只支持普通字符,如下:
fgrep ^-*B 00.pem 错误
fgrep certificate 00.pem 正确

上一篇:数字证书的创建与使用(采用java)


下一篇:Python 的上下文管理器是怎么设计的?