正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法
正则表达式主要用于查找符合某些复杂规则的字符串
在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的,文本处理工具有grep、sed
1 grep
grep 文本处理工具
下面是grep的参数
-n 显示内容的行号
-0 只显示内容
-q 静默 不显示
echo $? 返回0证明执行
-l 文件名
-A 5 返回该内容以及该内容的后5行(通常用于显示错误日志的内容,错误内容的前后信息)
-B 3 返回该内容以及该内容的前3行
-C 2 返回该内容以及该内容的上下两行
-c 行数(count数量)
-E==egrep (以后用grep)
-i 忽略大小写
-v 取反
-w 单词
2 正则表达式的规则
^
行首
gerp '^root' 匹配root开头的
$
行尾部
gerp 'bash$' 匹配bash结尾的 能都登录的
.
任意一个字符
gerp '^.' 查找任意字符开头的
gerp '^b.n'
*
前面的字符有0个到无穷个
*前面紧贴的字符
左边那一个字符
+
不能直接用grep,这是扩展正则用egrep
egrep gerp -e
左边 有一个到无穷个
左边那一个字符
{}
匹配前面字符的数量
内部可以指定数量
'ab{2,4}' 指定范围
'ab{2,}' 2-无穷
- 1
egrep -w 'ab{3}' a.txt 匹配单词
?
左边出现0次或者1次
[]
取其中的一个
egrep
[asdfasdt123456\-]
需要转义
-放到结尾 需要匹配-本身
[a-z]小写字母
[A-Z]大写字母
[a-zA-Z]==[a-Z]小写大写字母
[0-9]
[0-9]+ 左边的字符有一个或者无穷个
^[0-9] 取开头是数字的
^[^0-9]取反
3 sed stream editor 流编辑器
过滤一行的内容 1 定位 2 处理
-n 不打印 静默
-e '' -e '' 处理多个
-i 对文件本身修改
-f 规则写入文件
定位 '1' 用数字代表行
'3d' 删除第3行 实际文件没有写入
‘3p’打印第三行再打印一次
-n '3p'只打印第三行
‘3c 1111111’ 第三行改成1111111打印,其他行不变
‘3a 11111’ 第三行后面追加
‘3i 111’ 插入在原来第三行的前面
正则定位:
sed
'/^root/d' test.txt 删除root 开头
‘1,4d’ tes.txt 删除1-4行
‘1d;4d’ 删除1和4行
最常用
sed 's' test 替换 后面三斜杠原则
sed 's/root/hello/' test 没定位 全部匹配
sed 's/root/hello/g' test 没定位 全部匹配 g 把一行中的全部修改
sed -r 扩展 用到小括号
对/etc/passwd文件进行处理,将第一个字母删除
|
|
这种情况是将第一部分和第二部分用空格替换
解决办法是通过括号和括号的位置进行替换
|
|
|
|
|
|
将最后一个单词删除
|
|
将第一个和第二个单词替换
|
|
作业二:grep作业(正则表达式及字符处理)
目标文件/etc/passwd,使用grep命令或egrep
1.显示出所有含有root的行:
2.输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:
3. 显示出有多少行含有nologin。
4.显示出那些行含有root,并将行号一块输出。
5.显示出文件中
6.新建用户
abominable
abominate
anomie
atomize
编写正则表达式,将他们匹配出来
7.建四个用户
Alex213sb
Wpq2222b
yH438PIG
egon666
egon
过滤出用户名组成是字母+数字+字母的行
8.显示出/etc目录下所有包含root的文件名
9. 过滤掉/etc/ssh/sshd_config内所有注释和所有空行
作业三:Sed作业:以/etc/passwd文件为模板
1,删除文件每行的第一个字符。
2,删除文件每行的第二个字符。
3,删除文件每行的最后一个字符。
4,删除文件每行的倒数第二个字符。
5,删除文件每行的第二个单词。
6,删除文件每行的倒数第二个单词。
7,删除文件每行的最后一个单词。
8,交换每行的第一个字符和第二个字符。
9,交换每行的第一个字符和第二个单词。
10,交换每行的第一个单词和最后一个单词。
11,删除一个文件中所有的数字。
12,删除每行开头的所有空格。
13,用制表符替换文件中出现的所有空格。
14,把所有大写字母用括号()括起来。
sed -r ‘s/[A-Z]/(&)/g’ /etc/passwd
15,打印每行3次。
16,只显示每行的第一个单词。
17,打印每行的第一个单词和第三个单词。
18,用命令获取格式为 mm/yy/dd 的日期格式,结合管道,将其换成 mm;yy;dd格式