正则表达式 grep与sed的文本处理
[正则表达式 grep与sed的文本处理]
一:整理正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。它由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。
主要常用的有:
| 元字符 | 功能 | 元字符 | 功能 |
| ^ | 匹配字符串的开始位置 | $ | 匹配字符串的结束位置 |
| . | 匹配任意单个字符 | * | 匹配子表达式0次或n次 |
| + | 匹配子表达式一次或n次 | {n} | 匹配n次 |
| {n,} | 至少匹配n次 | {n,m} | 匹配n-m次 |
| ? | 匹配子表达式一次或0次 | () | 将括号里面的表达式定义为组 |
| [xyz] | 匹配xyz任意一个字符 | [a-Z] | 匹配指定字符范围的任意一个 |
| [^a-Z] | 匹配不在范围的任意字符 | | | 或 |
二:grep使用(正则表达式及字符处理)
目标文件/etc/passwd,使用grep命令或egrep
1.显示出所有含有root的行:
![](https://img.haomeiwen.com/i11415949/57be4040b187431b.png)
2.输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:
![](https://img.haomeiwen.com/i11415949/5e40d3f64978d343.png)
- 显示出有多少行含有nologin。
![](https://img.haomeiwen.com/i11415949/6a421154fc5c5baa.png)
4.显示出那些行含有root,并将行号一块输出。
![](https://img.haomeiwen.com/i11415949/ce375fb19fb8a9a3.png)
5.显示出文件中
6.新建用户
abominable
abominate
anomie
atomize
编写正则表达式,将他们匹配出来
![](https://img.haomeiwen.com/i11415949/248b52467fbeca05.png)
7.建四个用户
Alex213sb
Wpq2222b
yH438PIG
egon666
egon
过滤出用户名组成是字母+数字+字母的行
![](https://img.haomeiwen.com/i11415949/ad655119d0ce05ef.png)
8.显示出/etc目录下所有包含root的文件名
![](https://img.haomeiwen.com/i11415949/65740f5a9ae66600.png)
9. 过滤掉/etc/ssh/sshd_config内所有注释和所有空行
![](https://img.haomeiwen.com/i11415949/6fadb86fd25cc5c9.png)
三:Sed使用:以/etc/passwd文件为模板
1,删除文件每行的第一个字符。
![](https://img.haomeiwen.com/i11415949/df2c45ebff5f3776.png)
2,删除文件每行的第二个字符。
![](https://img.haomeiwen.com/i11415949/3afa0258180dab2f.png)
3,删除文件每行的最后一个字符。
![](https://img.haomeiwen.com/i11415949/2d7c9ae36d137dee.png)
4,删除文件每行的倒数第二个字符。
![](https://img.haomeiwen.com/i11415949/1a8ee7a901fb3823.png)
5,删除文件每行的第二个单词。
![](https://img.haomeiwen.com/i11415949/1ae2fdbc0012e914.png)
6,删除文件每行的倒数第二个单词。
![](https://img.haomeiwen.com/i11415949/584c9f58bc6a8a13.png)
7,删除文件每行的最后一个单词。
![](https://img.haomeiwen.com/i11415949/3ca6093ed72ea0b4.png)
8,交换每行的第一个字符和第二个字符。
![](https://img.haomeiwen.com/i11415949/f53f0b8b98410ccf.png)
9,交换每行的第一个字符和第二个单词。
![](https://img.haomeiwen.com/i11415949/894cbe283b67c94a.png)
10,交换每行的第一个单词和最后一个单词。
![](https://img.haomeiwen.com/i11415949/ce54fd40a391ecdd.png)
11,删除一个文件中所有的数字。
![](https://img.haomeiwen.com/i11415949/3b5b2afcf89fff26.png)
12,删除每行开头的所有空格。
![](https://img.haomeiwen.com/i11415949/1173fc1b91f25ef2.png)
13,用制表符替换文件中出现的所有空格。
![](https://img.haomeiwen.com/i11415949/34e5204e8466f1b1.png)
14,把所有大写字母用括号()括起来。
![](https://img.haomeiwen.com/i11415949/e91343a99d990243.png)
15,打印每行3次。
![](https://img.haomeiwen.com/i11415949/3f4ce95491a5b038.png)
16,只显示每行的第一个单词。
![](https://img.haomeiwen.com/i11415949/d22121c4e30ca229.png)
17,打印每行的第一个单词和第三个单词。
![](https://img.haomeiwen.com/i11415949/63019fc1b214da07.png)
18,用命令获取格式为 mm/yy/dd 的日期格式,结合管道,将其换成 mm;yy;dd格式
![](https://img.haomeiwen.com/i11415949/a50135e47f136747.png)