正则表达式是一种强大的工具,用于在文本中查找、匹配和替换特定的字符串模式。
实验目的
- 掌握正则表达式的表达方式
- 掌握grep/egrep命令的用法
- 掌握sed 命令的用法
- 掌握awk命令的用法
正则表达式
- 实验目的
- 实验内容
- 实验过程
- 创建grep文件来进行如下操作
- 用sed命令完成下列要求
- 用awk 命令完成下列要求
- 用所学命令完成下列要求
实验内容
1. 写出满足下列条件的所有行的正则表达式:
- 以“a”开头;
以“b”结尾;
以“a”开头,中间任意,最后以“b”结尾;
以“c”“d”或“e”开头;
包含“f”,它后面紧跟着“g”;
包含“f”,隔1个字母之后是“g”;
以小写字母开头;
包含数字;
以“h”开头,含有字母“i”;
只含有4个字母;
只含有4个字母,但不包含“j”。
2. 用sed命令完成下列要求:
- ①把/etc/passwd复制到/rool/pwd.txt,用scd打印所有行;
②打印pwd. txt 的3到7行;
③打印pwd.txt 中包含‘root’的行;
④删除pwd. txt 的14行以及以后所有行;
⑤删除 pwd. txt 中包含‘bash’的行;
⑥替换 pwd. txt 中‘root’为‘toor’;
⑦替换 pwd.txt 中‘/sbin/nologin’为‘/bin/login’
⑧删除 pwd. txt中2到8行中所有的数字;
⑨删除pwd.txt中所有特殊字符(除了数字以及大小写字母);
⑩在 pwd.txt 中10行到末行最前面加‘aaa:’。
3. 用awk 命令完成下列要求:
- ①用awk 打印整个pwd.txt;
②查找所有包含‘bash’的行;
③用‘:’作为分隔符,查找第三段等于0的行;
④用‘:’作为分隔符,查找第一段为‘root’的行,并把该段的‘root’换成‘toor’(可以连同sed一起使用);
⑤用‘:’作为分隔符,打印最后一段;
⑥打印行数大于10的所有行;
⑦用‘:’作为分隔符,打印所有第三段小于第四段的行;
⑧用‘:’作为分隔符,打印第一段以及最后一段,并且中间用‘@’连接(例如,第一行的形式’ root@ /bin/bash‘)。
4. 用所学命令完成下列要求:
- ①取得/root 文件的权限对应的数字内容,如-rwxr-xr-x为755,要求使用命令取得755或0755 这样的数字(至少两种方法完成);
②取得 Linux 操作系统对应的合法IP 地址,如192.168.136.100,要求使用命令取得类似这样的IP 地址(至少两种方法完成)。
实验过程
- 创建一个如下内容的grep.txt文件:
123rot:x:0:0:/rot:/bin/bash
123operator:x:11:0:operator:/root:/sbin/nologin
123operator:x:11:0:operator:/rooot:/sbin/nologin
123roooot:x:0:0:/rooooot:/bin/bash
1231111111111111111111111111111111111
创建grep文件来进行如下操作
- 写出满足下列条件的所有行的正则表达式:
为了验证正则表达式是否正确可以根据题目在grep文件中增添一些字符串。
- ①以“a”开头;
②以“b”结尾;
③以“a”开头,中间任意,最后以“b”结尾;
④以“c”“d”或“e”开头;
⑤包含“f”,它后面紧跟着“g”;
⑥包含“f”,隔1个字母之后是“g”;
$ sudo grep '^a' grep.txt
$ sudo grep 'b$' grep.txt
$ sudo grep '^ab$' grep.txt
$ sudo grep '^ab$' grep.txt
$ sudo grep '^[c-e]' grep.txt
$ sudo grep '{fg}' grep.txt
$ sudo grep 'f[^g]g' grep.txt
- ⑦以小写字母开头;
⑧包含数字;
⑨以“h”开头,含有字母“i”;
⑩只含有4个字母;
⑪只含有4个字母,但不包含“j”。
$ sudo grep '^[a-z]' grep.txt
$ sudo grep '^[0-9]' grep.txt
$ sudo grep '^h\(.*\)i' grep.txt
$ sudo grep '[a-zA-Z]{4}' grep.txt
$ sudo grep '[a-fh-zA-Z]{4}' grep.txt
用sed命令完成下列要求
- ①把/etc/passwd复制到/rool/pwd.txt,用scd打印所有行;
$ sudo cp /etc/passwd /root/pwd.txt
$ sudo sed -n '1,$'p /root/pwd.txt
- ②打印pwd. txt 的3到7行;
③打印pwd.txt 中包含‘root’的行;
④删除pwd. txt 的14行以及以后所有行;
⑤删除 pwd. txt 中包含‘bash’的行;
$ sudo sed -n '3,7'p /root/pwd.txt
$ sudo sed -n '/root/'p /root/pwd.txt
$ sudo sed -n '14,$'d /root/pwd.txt
$ sudo sed -n '/bash/'p /root/pwd.txt
- ⑥替换 pwd. txt 中‘root’为‘toor’;
$ sudo sed -n '1,$s/root/toor/g' /root/pwd.txt
$ sudo sed -n '1,$'p /root/pwd.txt
- ⑦替换 pwd.txt 中‘/sbin/nologin’为‘/bin/login’
$ sudo sed -n '1,$s@/sbin/nologin@/bin/login@g' /root/pwd.txt
$ sudo sed -n '1,$'p /root/pwd.txt
- ⑧删除 pwd. txt中2到8行中所有的数字;
$ sudo sed -n '2,8s/[0-9]//g' /root/pwd.txt
$ sudo sed -n '1,$'p /root/pwd.txt
- ⑨删除pwd.txt中所有特殊字符(除了数字以及大小写字母);
$ sudo sed 's/[^0-9a-zA-Z]//g' /root/pwd.txt
- ⑩在 pwd.txt 中10行到末行最前面加‘aaa:’。
$ sudo sed -n '10,$s/^.*$/aaa&/' /root/pwd.txt
$ sudo sed -n '1,$'p /root/pwd.txt
用awk 命令完成下列要求
- ①用awk 打印整个pwd.txt;
- ②查找所有包含‘bash’的行;
③用‘:’作为分隔符,查找第三段等于0的行;
- ④用‘:’作为分隔符,查找第一段为‘root’的行,并把该段的‘root’换成‘toor’(可以连同sed一起使用);
- ⑤用‘:’作为分隔符,打印最后一段;
- ⑥打印行数大于10的所有行;
- ⑦用‘:’作为分隔符,打印所有第三段小于第四段的行;
- ⑧用‘:’作为分隔符,打印第一段以及最后一段,并且中间用‘@’连接(例如,第一行的形式’ root@ /bin/bash‘)。
用所学命令完成下列要求
- ①取得/root 文件的权限对应的数字内容,如-rwxr-xr-x为755,要求使用命令取得755或0755 这样的数字(至少两种方法完成);
- ②取得 Linux 操作系统对应的合法IP 地址,如192.168.136.100,要求使用命令取得类似这样的IP 地址(至少两种方法完成)。