第十一章:正则表达式课后习题

第十一章:正则表达式课后习题

一、sed练习题

1.把/etc/passwd 复制到/root/test.txt,用sed打印所有行。

[root@zl_cloud ~]# cp /etc/passwd /root/test.txt
[root@zl_cloud ~]# sed -n '1,$'p test.txt
[root@zl_cloud ~]# 

2.打印test.txt的第3行~第10行。

# sed -n ‘3,10’p test.txt

3.打印test.txt中包含root的行。

# sed -n ‘/root/’p test.txt

4.删除test.txt的第15行以及后面的所有行。

# sed ‘15,$’d test.txt

5.删除test.txt中包含bash的行。

# sed ‘/bash/’d test.txt

6.将 test.txt 中的 root 替换为 toor。

# sed ‘s/root/toor/g’ test.txt

7.将 test.txt 中的 /sbin/nologin 替换为 /bin/login

# sed ‘s#sbin/nologin#bin/login#g’ test.txt

8.删除test.txt第5行~第10行中所有的数字。

# sed ‘5,10s/[0-9]*//g’ test.txt

9.删除test.txt中所有的特殊字符(除了数字以及大小写字母)。

# sed ‘1,$s/[^0-9a-zA-Z]//g’ test.txt

10.把test.txt中第一个単词和最后一个单词调换位置。

# sed -r 's/(^[a-zA-Z]*)([^a-zA-Z].*[^a-zA-Z])([a-zA-Z]*$)/\3\2\1/' test.txt

一开始写成了这样,结果是把第一个字符串接到了最后一个字符串后面:

[root@zl_cloud ~]# sed -r ‘s/(^[a-zA-Z]*)(.*)((a-zA-Z)*$)/\3\2\1/g’ test.txt

然后不行,我就看了下答案,然后:

[root@zl_cloud ~]# sed -r 's/(^[a-zA-Z]*)(^[a-zA-Z].*^[a-zA-Z])([a-zA-Z]*$)/\3\2\1/' test.txt

反正没换成功。这里就关乎到概念的混淆了,这里讲一下^在括号内和在括号外的区别 。
[^字符串]:这里^代表除括号内字符串的内容;
^[字符串]:这里^代表以该字符串的开始;
^[^字符串]:这里整体就表示除该字符串的整体。

11.把test.txt中出现的第一组数字(1个或多个)和最后一个单伺调换位置。

# sed -r 's/(^[^0-9]*)([0-9]*)([^0-9].*[^a-zA-Z])([a-zA-Z]+$)/\1\4\3\2/g' test.txt

12.把test.txt中第一个数字移动到本行末尾。

# sed -r 's/(^[^0-9]*)([0-9]*)([^0-9].*$)/\1\3\2/g' test.txt

13.在test.txt第20行到最后一行最前而加aaa 。

# sed -r '20,$s/^.*$/aaa&/' test.txt

二、awk练习题

1.用awk打印整个test.txt。 (以下操作都是针对test.txt的,用awk工具实现)

# awk ‘{print $0}’ test.txt

2.査找所有包含bash的行。

# awk ‘/bash/’ test.txt

3.用:作为分隔符,査找第3个字段等于0的行。

# awk -F ‘:’ ‘$3==”0”’ test.txt

4.用:作为分隔符,査找第1个字段为root的行,并把该段的root换成toor(可以连同sed一起使用。)

# awk -F ‘:’ ‘$1==”root”’ test.txt |sed ‘s/root/toor/g’

5.用:作为分隔符,打印最后一个字段。

# awk -F ‘:’ ‘{print $NF}’ test.txt

6.打印行数大于20的所有行。

# awk -F ‘:’ ‘NR>20’ test.txt

7.用:作为分隔符,打印所有第3个字段小于第4个字段的行。

# awk -F ‘:’ ‘$3<$4’ test.txt

8.用:作为分隔符,打印第1个字段以及最后一个字段,并且中间用@连接(例如,第1行应该是这样的形式:root@/bin/bash )

# awk -F ‘:’ ‘{print $1 “@”$NF}’ test.txt

9.用:作为分隔符,把整个文档的第4个字段相加,求和。

# awk -F ‘:’ ‘{(sum+=$4)}; END {print sum}’ test.txt

三、正则表达式课后练习

1.如何把/etc/passwd中用户uid大于500的行打印出来?

# awk -F ':' '$3>”500”' /etc/passwd

2.awk中变量NR和NF分别表示什么含义?命令awk -F ‘:’ '{print $NR}’ /etc/passwd会打印出 什么结果?

NR:表示行号;
NF:表示用分隔符分隔后一共有多少段。

[root@zl_cloud ~]# awk -F ':' '{print $NR}' /etc/passwd
root
x
2
4
lp
/sbin
/sbin/shutdown
[root@zl_cloud ~]# 




















[root@zl_cloud ~]#

他也就是打印出了对应段落的对应字符串。也就是第一行打印第一行的第一个字符串,第二行打印第二个字符串这样以此类推。不懂的话可以cat test.txt查看一下。

3.用grep把1.txt文档中包含abc或者123的行过滤出来,并在过滤出来的行前而加上行号。

# grep -E -n 'abc|123' 1.txt

4.命令grep -v ‘^$’ 1.txt会过滤出哪些行?

会过滤除非空行。

5.符号.、.分别表示什么含义?符号+和?表示什么含义?这5个符号是否可以在grep、egrep、sed以及awk中使用?

  • .:代表一个任意字符;
  • .*:代表零个或多个任意字符,包括空行;
  • *:代表前面紧邻的字符有零个或多个。即前面紧邻的字符可以不存在,也可以有多个那个字符;
  • +:表示前面紧邻的那个字符有一个或多个;
  • :表示前面紧邻的那个字符有零个或一个。
    grep和sed可以使用前三个,egerp和awk可以全部使用。

6.grep里面的符号{}用在什么情况下?

符号{ },其内部为数字,表示前面的字符要重复的次数。需要强调的是,{ }左右都需要加上转义字符。另使用{ }时还可以表示一个范围,具体格式为{n1,n2},n2还可以为空,这时表示大于等于n1次。
# grep ‘o\{2\}’ /etc/passwd//这里意思就是查看该文件下出现2个o也就是oo的行。

7.sed有一个选项可以直接更改文本文件,是哪个选项?

-i选项。

8.sed -i 's/.* ie//;s/[“|&].*//’ file这条命令表示什么操作呢?

首先;把该命令分成了两个部分。第一部分表示把file文件以ie结尾的字符串删除。第二部分把file文件以“或者&开头的字符串删除。

9.如何删除一个文档中的所有数字或者字母?

删除所有数字:# sed -i ‘s/[0-9]//g’ filename
删除所有字母:# sed -i ‘s/[a-zA-Z]//g’ filename

10.截取日志1.log的第1个字段(以空格为分隔符),按数字排序,然后去重,但是需要保留重复的数量,如何做?

# awk -F ‘ ’ ‘{print $1}’ 1.log | sort -n | uniq -c

11.使用awk过滤出1.log中第7个字段(以空格为分隔符)为200并且第8个字段为11897的行。

# awk -F ‘ ’ ‘{$7==”200” && $8==”11897”}’ 1.log

12.请比较这两个命令的异同:grep -v ‘^[0-9]’ 1.txtgrep ‘^[^0-9]’ 1.txt

# grep -v ‘^[0-9]’ 1.txt //输出文件中不以数字开头的行,(也会输出空行)
# grep ‘^[^0-9]’ 1.txt //输出文件中不以数字开头的行,(不会输出空行)

13.awk中的$0表示什么?为什么以下两条命令的$0结果不一致呢?

# awk -F ‘:’ ‘(print $0}' 1.txt //这个是打印所有的行
# awk -F ‘:’ '$7=1 (print $0}’ 1.txt //第七段内容改为1,并打印所有的行

14.使用grep过滤某个关键词时,如何把包含关键词的行连同上面一行打印出来?连同下面一行也打印呢?同时打印上下各一行呢?

①grep -B1;
②grep -A1;
③grep -C1;

15.使用sed与awk结合输出虚拟机当前ip地址。 环境就使用你们当前使用的任何一个虚拟机环境。

[root@zl_cloud ~]# sed -n '/IPADDR/'p /etc/sysconfig/network-scripts/ifcfg-eno16777736 | awk -F '=' '{print $2}'
192.168.10.129
[root@zl_cloud ~]# 

猜你喜欢

转载自blog.csdn.net/zhang_ZERO/article/details/105072494