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

时间:2021-07-28
本文章向大家介绍三剑客之grep命令---------不知江月待何人,但见长江送流水。,主要包括三剑客之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
这个集合不等于^[a-zA-Z0-9]
[: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内所有注释和所有空行

原文地址:https://www.cnblogs.com/haopapa/p/15072127.html