shell脚本正则表达式

青春壹個敷衍的年華 提交于 2021-02-13 09:51:22

grep与正则表达式:
1、grep 程序
Linux下有文本处理三剑-----grep sed awk
grep :文本,行过滤工具
sed:文本 行编辑器(流编辑器)
awk:报告生成器(做文本格式化输出)
grep
包括三个命令:grep egrep fgrep,他们是用来进行行模式(pattern)匹配
egrep = grep -E //使用扩展的正则表达式进行匹配
fgrep=fast grep //只使用文件通配符进行匹配
*grep默认使用正则表达式进行文本匹配*
grep 的用法:
grep 【option】.....PATTERN[filename]
grep的常见选项---option
-E 支持使用扩展的正则表达式(ERE)(regexp)
-P 使用Perl语言的正则表达式引擎进行搜索(每一种语言的正则表达式引擎都不相同,甚至sed grep AWK 使用的regrexp的引擎也是不同的)
-i忽略大小写
-v 进行反选
-o 仅仅输出匹配的内容(默认输出的是匹配到的行)
--color=auto 语法着色
-n 显示行号
a*
grep 的PATTERN
作用:通过一些特殊字符,来表示一类字符内容,交给前面的命令来执行;如果使用特殊字符本身含义,就需要\进行转义;
回顾:
* ? [] [^]
1、字符匹配
.代表任意一个字符 相当于?
[] 范围内任意一个字符
[^]范围外任意一个字符
字符类:[:digit:][:alnum:][:lower:][:upper:][:space:][:punct:]
2、次数匹配
\*匹配前面的字符0次到n次
\?匹配前面的字符0次到1次
\+匹配前面的字符1次到n次
\{m\}匹配前面的字符m次
\{m,n\}匹配前面的字符m次到n次
\{0,n\}匹配前面的字符0次到n次{0要不要}
\{m\}匹配前面的字符至少m次
3、位置錨钉
^锚定行首
$锚定行尾
\b锚定单词词首和词尾
\>锚定词尾
<\锚定词首
<\root\> rooter
4、分组
abc* abcccccc abc不是一个整体
\(\) 示例:\(abc)* abcabcabc abcccc
**分组特性: 默认情况下,Linux系统会为分组指定变量,变量的表示形式\1\2\3\4
----------------------------------------------------------------------------------------------------
练习:
1、显示/proc/meminfo文件中大小S开头的行
grep -i *^s"/proc/memminfo

2、显示/etc/passwd文件中不以/bin/bash结尾的行
grep- v */bin/bash$ "/etc/passwd
3、显示/etc/passwd文件中UID号最大的用户的用户名
sort -n -t;-k3 /etc/passwd |tail -1 | cut -d : -f7
4、如果用户root存在,显示默认的shell程序
grep *^root\>"/etc/passwd &>/dev/null && grep "^root\>"/etc/passwd |cut-d: -f7
id root & >/dev/null && grep "^rot\>"/etc/passwd |cut -d: -f7
5、找出/etc/passwd 中的二位或三位数
grep /"[0-9]\{2,3}"/etc/passwd
-w //匹配固定单词
\<[0-9]\[{2-3}\>
\b<[0-9]\[{2,3}\b
6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的后面为空白字符的行
grep "^[[:space:]]\+.*[^[:space:]]$"/etc/rc.d/rc.sysinit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!