本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88866
文本处理grep
grep :根据模式去搜索文本,并将匹配到的文本显示出来
pattern(模式):文本字符和正则表达式的元字符组合而成的匹配条件
正则表达式:(REGular EXPression)正则表达式就是处理字符串的方法,通过一些特殊字符的辅助,让用户轻松方便的达到查找、删除、修改特定字符串的处理程序
grep 的用法
name: grep, egrep, fgrep – print lines matching a pattern
grep [OPTIONS] PATTERN [FILE…]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]
option:
–color=auto 匹配到的字符串带颜色显示出来(auto的自动附加颜色)
-i :匹配字符的时候忽略大小写
example: grep -i “uuid” /etc/passwd
-v : 取反,显示没有被匹配到的行
example: grep -v “uuid” /etc/passwd
-n:显示匹配的行号
-c: 统计匹配的行数
-o: 仅显示匹配到的字符串,其他不显示
-q: 静默模式,不输出任何信息(相当于重定向到&>/dev/null)
-A #: after, 后#行
-B #: before, 前#行
-C #:context, 前后各#行 显示匹配到字符串的前后各#行
-e:实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
-w:匹配整个单词
example: grep -w bash filename (bash 可以匹配 basher 匹配不到)
数字,字母,下划线不可以作为单词的分隔符(界线)
-E:使用ERE(grep -E 相当于 egrep)
-F:相当于fgrep,不支持正则表达式
字符匹配:
. 匹配任意单个字符
example: r..t root,rabt,r12t(字母,数字,符号,相同不相同,只要是两个) 都可以匹配。
[] 匹配指定范围内的任意单个字符
example: [abcd] 匹配到a或者b或者c或者d
[^] 匹配指定范围外的任意单个字符
example: [^wang]匹配wang之外的字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即A-Z, a-z
[:lower:] 小写字母[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次(工作在贪婪模式)
贪婪模式:尽可能长的匹配
.*任意长度的任意字符
\?匹配其前面的字符0或1次
example : root\? 表示匹配其前面的字符也就是t一次或者0次 比如:root roo
\+匹配其前面的字符至少1次
example : root\+ 表示匹配t字符至少一次以上,比如:root roottt rootttttt
\{n\}匹配前面的字符n次
\{m,n\}匹配前面的字符至少m次,至多n次
\{,n\}匹配前面的字符至多n次
\{n,\}匹配前面的字符至少n次
位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或\b词首锚定,用于单词模式的左侧
\> 或\b词尾锚定;用于单词模式的右侧
\<PATTERN\>匹配整个单词
分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,
如:\(root\)\+,将root作为一个整体使用,root\+ 只是匹配t字符
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …
\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
示例:\(string1\+\(string2\)*\)
\1 :string1\+\(string2\)*
\2 :string2
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
练习
1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
grep -i “^s” /proc/meminfo
grep -e ^s -e ^S /proc/meminfo
2、显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v “/bin/bash$” /etc/passwd
3、显示用户rpc默认的shell程序
grep -w “^rpc” /etc/passwd |cut -d: -f7
4、找出/etc/passwd中的两位或三位数
grep -o “\b[0-9]\{2,3\}\b” /etc/passwd
5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行
grep “^[[:space:]]\+[^[:space:]]” /etc/grub2.cfg
6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行
netstat -tan |grep “LISTEN[[:space:]]*$”
7、显示CentOS7上所有系统用户的用户名和UID
cut -d: -f1,3 /etc/passwd |grep “\b[0-9]\{1,3\}$”
8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名同shell名的行
grep “^\(.*\)\>.*\b\1$” /etc/passwd
9、利用df和grep,取出磁盘各分区利用率,并从大到小排序
df |grep “/dev/sd” |grep -o “[0-9]\{1,3\}%” |grep -o “[0-9]\{1,3\}” |sort
扩展正则表达式 ,egrep
egrep = grep -E
egrep[OPTIONS] PATTERN [FILE…]
字符匹配:(用法和grep用法一致)
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符
次数匹配:
*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
位置锚定:
^ :行首
$ :行尾
\<, \b :语首
\>, \b :语尾
分组:
()
后向引用:\1, \2, …
或者:(|表示或者,|前后分别是两个字符,)
a|b: a或b
C|cat: C或cat
(C|c)at:Cat或cat (括号表示展开)
赞 (0)
VIM命令 总结
上一篇
2017-11-25 11:40
Linux系统操作练习-2
下一篇
2017-11-25 23:10