Grep及基本正则表达式:正则表达式就是为了处理大量的文本|字符串而定义的一套规则和方法
1.grep常用基本参数及作用:
参数 | 作用 |
---|---|
–color | 匹配到的字符串显示颜色 |
-i | 忽略字符大小写 |
-o | 仅显示匹配的字串 |
-v | 反向选取, 即显示不匹配的行 |
-E | 使用扩展正则表达式 |
-n | 显示行号 |
-w | 匹配指定的字符串 |
2.正则表达式常用:
元数据 | 意义和范例 |
---|---|
^word | 搜寻word开头的行 |
word$ | 搜寻word结尾的行 |
. | 匹配任意一个字符 |
\ | 转义字符 |
* | 前面的一个字符重复0到多次 |
[list] | 匹配一系列字符中的一个 |
[n1-n2] | 匹配一个字符范围中的一个字符 |
[^list] | 匹配字符集以外的字符 |
{n1,n2} | 前面的单个字符重复n1,n2次 |
<word | 单词的开头 |
word> | 单词的结尾 |
‘ ‘ | 强引用,引号内的内容不变 |
“ ” | 弱引用,变量会替换 |
[[:alnum:]] | 代表英文大小写字符及数字,即 0-9, A-Z, a-z |
[[:alpha:]] | 代表任何英文大小写字符,即 A-Z, a-z |
[[:space:]] | 任何会产生空白的字符,包括空白键, [Tab] 等等 |
[[:digit:]] | 代表数字,即 0-9 |
[[:lower:]] | 代表小写字符,即 a-z |
[[:upper:]] | 代表大写字符,即 A-Z |
3.egrep及扩展正则表达式
grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展
命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价(grep -E == egrep)
一般情况下,基本正则表达式就够用了
特殊情况下,复杂的扩展表达式,可以简化字符串的匹配
扩展正则表达式就是在基本正则表达式的基础上,增加了一些元数据
元数据 | 意义和范例 |
---|---|
+ | 重复前面字符1到多次 |
匹配god,good,goood等字符串,grep -nE go+d’ file | |
? | 匹配0或1次前面的字符 |
匹配gd,god,grep -nE ‘go?d’ file | |
| | 或or的方式匹配多个字符串 |
匹配god或者good,grep -nE’god | |
() | 匹配整个括号内的字符串,原来都是匹配单个字符 |
搜索good或者glad,grep -nE 'g(oo | |
* | 前面的字符重复0到多次 |
第一题:
**
Week22.config
“Open Source” is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn’t fit me.
However, this dress is about $ 3183 dollars.^M
GNU is free air not free beer.^M
Her hair is very beauty.^M
I can’t finish the test.^M
Oh! The soup taste good.^M
motorcycle is cheap than car.
This window is clear.
the symbol ‘*’ is represented as start.
Oh! My god!
The gd software is a library for drafting programs.^M
You are the best is mean you are the no. 1.
The world is the same with “glad”.
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let’s go.
#I am ghost
1. 取得所有 the 字符相关信息及行号
2. 取得无 the 字符相关信息及行号
3. 取得 test 或 taste 这两个单字相关信息及行号
4. 取得所有 oo 字符相关信息及行号
5. 不想取 oo 前面有 g 的字符相关信息及行号
6. oo 前面不想要有小写的字符相关信息及行号
7. 取得 the 只在行首相关信息及行号
8. 取得有 数字 相关信息及行号
9. 取得开头是小写 相关信息及行号
10. 不想要开头是英文字母 相关信息及行号
11. 取得行尾结束为小数点. 相关信息及行号
12. 取得空白行 相关信息及行号
13. 取得g??d 的字符相关信息及行号
14. 取得至少两个 o 以上的字符相关信息及行号
15. 取得开头与结尾都是 g ,两个g 之间仅能存在至少一个 o 相关信息及行号
16. 取得g 开头与 g 结尾的字符,当中的字符可有可无 相关信息及行号
17. 取得两个连续 o 的字符相关信息及行号
19. 取得g 后面连接2到5个 o,然后再接一个 g 的字符相关信息及行号
第二题:
#1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
#2、显示/etc/passwd文件中不以/bin/bash结尾的行
#3、显示用户alice默认的shell程序
#4、找出/etc/passwd中的两位或三位数
#5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
#6、找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行
#7、显示CentOS7上所有系统用户的用户名和UID
#8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin)找出/etc/passwd用户名和shell同名的行
cat /etc/passwd |grep -w “([:]):./\1$”
#9、利用df和grep,取出磁盘各分区利用率,并从大到小排序
df |grep “^/dev/sd”|grep -wo “[0-9]+%”|sort -nr
#10、显示三个用户root、David、alice的UID和默认shell
#11、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
#12、使用egrep取出/etc/rc.d/init.d/functions中其基名
#13、使用egrep取出上面路径的目录名
#14、统计last命令中以root登录的每个主机IP地址登录次数
#15、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]
#16、显示ifconfig命令结果中所有IPv4地址
#17、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面
cat test | grep -o “[[:lower:]]”|sort |uniq -c|sort -nr |tr -s ’ ’ | cut -d " " -f 3 |tr -d
‘\n’
#18.找出ifconfig命令结果中的1-255之间的数字
#步骤拆解
#2 #ifconfig | grep -E “<([1-9]|[1-9][0-9])>” #| 为或
#25 #ifconfig | grep -E ‘<(1[0-9][0-9])>’
#255 要注意规律 #ifconfig | grep -E ‘<(2[0-4][0-9]|25[0-5])>’