# 11.4课后习题
**(1)、如何把/etc/passwd中用户uid大于500的行打印出来?**
答案:
awk -F':' '$3>500' /etc/passwd
**(2)、awk中变量NR和NF分别表示什么含义?,命令awk -F':' '{print $NR}' /etc/passwd会打印出什么结果?**
答案:
NR表示行数,NF表示一共有多少段
代码含义:打印出每一行行号所对应的字段
**(3)、用grep把1.txt文档中包含abc或者123的行过滤出来,并在过滤出来的行前面加上行号**
答案:
grep -n 'abc\|123' 1.txt
**(4)、命令grep -v '^$' 1.txt会过滤出那些行**
答案:
会过滤出不是空的行
**(5)、符号.、.*和*表示什么含义?符号+和?表示什么含义?这5个符号是否可以在grep、egrep、sed 以及awk中使用?**
答案:
'.' 表示一个任意的字符;
'*' 表示前面紧邻的那个字符有零个载多个即前面紧邻的那个字符可以不存在,也可以有多个,
'.*' 表示零个或多个任意字符,包括空行;
'+' 表示前面紧邻的那个字符有一个或多个;
'?' 表示前面紧邻的那个字符有零个或一个;
grep和sed可以使用'.' 、'*'和'.*'但是不能使用'+' '?' egrep和awk全部可以使用。
**(6)、grep里面的符号{}用在什么情况下?**
答案:
{ },其内部为数字,表示前面的字符要重复的次数。数字可以是单个数字{n},也可以是一个区间{n1,n2}。在字符串中,{ }左右都需要加上脱意字符 ‘\’。
**(7)、sed有一个选项可以直接更改文本文件,是那个选项?**
答案:
-i选项
**(8)、sed -i 's/.* ie //;s/["|&].*//' file这条命令表示什么操作**
答案:
表示把file中出现的以ie结尾的字符串删除;把file中以"或|或&开头的字符串删除
**(9)、如何删除一个文档中所有的数字或者字母?**
答案:
删除所有的数字: sed -i 's/[0-9]//g' 1.txt
删除所有的字母: sed -i 's/[a-Z]//g' 1.txt
**(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" {print $0}' 1.log
**(12)、请比较这两个命令的异同:grep -v '^[o-9]' test.txt 和 grep '^[0-9]' test.txt。**
答案:
grep -v '^[o-9]' test.txt 以非数字开头的行匹配出来并输出打印,包括空行
grep '^[0-9]' test.txt 以数字开头的行匹配出来并输出打印,不包括空行
**(13)、awk中的$0表示什么?为什么以下两条命令的$0结果不一致呢?**
awk -F ':' '{print $o}' test.txt
awk -F ':' ‘$7=1 {print $o}' test.txt
答案:
$0表示整行、
awk -F ':' '{print $0}' test.txt 表示打印所有的行
awk -F ':' '$7=1 {print $0}' test.txt 以冒号为分隔符,输出时将每行的第七段的内容更改为1,并打印所有的行,此时并不会连带分隔符一起输出
**(14)、使用grep过滤某个关键词时,如何把包含关键词的行连同上面一行打印出来?连同下面一行也打印呢?同时打印上下各一行呢?**
答案:
打印出上面一行:grep -B1 'halt' /etc/passwd
打印出下面一行:grep -A1 'halt' /etc/passwd
打印出上下各一行:grep -C1 'halt' /etc/passwd
2021-04-16
最新推荐文章于 2024-08-24 15:46:50 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)