三剑客之grep命令---------不知江月待何人,但见长江送流水。

三剑客之grep命令

主要是过滤
1.grep 文件全局查找,打印匹配到的
2.egrep 支持扩展正则表达式
3。fgrep 按字面解释所有的字符

命令格式:

命令:grep

参数

-o 只显示匹配到的内容
-E 支持扩展正则符号
-i 不区分大小写
-v 反向查找
-n 过滤到的每一行加上行号
-w 匹配单词
-r 递归查询
-l 查询到后显示文件名
-c 查询到后输出匹配到目标占据多少行
-q 静默输出
-A 打印目标下N行
-B 打印目标上N行
-C 打印目标上下N行

正则表达式和扩展正则

^ 行首
$ 行尾
. 任意一个字符
* 零个或多个前导字符
.* 所有字符
[] 字符组内任何一个字符
[^] 字符组内取反,不包含任何字符组内的字符
[a-z] 26个英文字母小写
[A-Z] 26个英文字母大写
[0-9] 0-9的数字
\ 转义符号
< 词首定位符
> 词尾定位符
+ 1个或多个前导字符
? 0个或1个前导字符
a|b a或者b
() 组字符,将里面字符看成1小组
()()\1\2 小组按顺序可以调用
x{n} x重复n次
x{n,} x至少重复n次
x{n,m} x重复n-m次
\w 所有字母与数字[a-zA-Z0-9]
\W 和小w相反
\b 词边界 '\blove\b' = '<love>'

总结

grep 使用基本元字符集
^ $ . * [] [^] < > () {}
grep -E 或 egrep
? + {} | ( )

posix定义的字符分类

表达式 功能 示例

[:alnum:] 字母与数字字符 [[:alnum:]]+
[:alpha:] 字母字符(包括大小写字母) [[:alpha:]]{4}
[:blank:] 空格与制表符 [[:blank:]]*
[:digit:] 数字字母 [[:digit:]]?
[:lower:] 小写字母 [[:lower:]]{5,}
[:upper:] 大写字母 [[:upper:]]+
[:punct:] 标点符号 [[:punct:]]
[:space:] 包括换行符,回车等在内的所有空白[[:space:]]+

详解

[:alnum:] Alphanumeric characters.
匹配范围为 [a-zA-Z0-9]
[:alpha:] Alphabetic characters.
匹配范围为 [a-zA-Z]
[:blank:] Space or tab characters.
匹配范围为 空格和TAB键
[:cntrl:] Control characters.
匹配控制键 例如 ^M 要按 ctrl+v 再按回车 才能输出
[:digit:] Numeric characters.
匹配所有数字 [0-9]
[:graph:] Characters that are both printable and visible. (A space is print-
able, but not visible, while an a is both.)
匹配所有可见字符 但不包含空格和TAB 就是你在文本文档中按键盘上能用眼睛观察到的所有符号
[:lower:] Lower-case alphabetic characters.
小写 [a-z]
[:print:] Printable characters (characters that are not control characters.)
匹配所有可见字符 包括空格和TAB
能打印到纸上的所有符号
[:punct:] Punctuation characters (characters that are not letter, digits, con-
trol characters, or space characters).
特殊输入符号 +-=)(*&^%$#@!~`|"'{}[]:;?/>.<,
注意它不包含空格和TAB
这个集合不等于[1]
[:space:] Space characters (such as space, tab, and formfeed, to name a few).

[:upper:] Upper-case alphabetic characters.
大写 [A-Z]
[:xdigit:] Characters that are hexadecimal digits.
16进制数 [0-f]

使用方法:

[root@egon ~]# grep --color '[[:alnum:]]' /etc/passwd

练习

正则表达式及字符处理

目标文件/etc/passwd,使用grep命令或egrep
1.显示出所有含有root的行:
2.输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:
3. 显示出有多少行含有nologin。
4.显示出那些行含有root,并将行号一块输出。
5.显示出文件中
6.新建用户
abominable
abominate
anomie
atomize
编写正则表达式,将他们匹配出来
egrep 'a.omi(nabl|nat|z|)e' /etc/passwd
7.建四个用户
Alex213sb
Wpq2222b
yH438PIG
egon666
egon

过滤出用户名组成是字母+数字+字母的行
8.显示出/etc目录下所有包含root的文件名
9. 过滤掉/etc/ssh/sshd_config内所有注释和所有空行


  1. a-zA-Z0-9 ↩︎

posted @ 2021-07-28 18:57  郝怕怕  阅读(65)  评论(0)    收藏  举报