第十一章练习题答案 
1. 如何把 /etc/passwd 中用户uid 大于500 的行给打印出来 
awk -f ':' '$3 > 500' /etc/passwd 

2. awk中 nr,nf两个变量表示什么含义awk -f ':' '{print $nr}' /etc/passwd 会打印出什么结果出来 
nr表示行数,nf表示一共有多少段 
awk -f ':' '{print $nr}' /etc/passwd 会依次打印对应的行数的段,第一行打印第一段,第二行打印第二段... 到了最后就打印空行了 

3. 用grep把1.txt文档中包含'abc'或者‘123’的行过滤出来,并在过滤出来的行前面加上行号. 
grep -e -n 'abc|123' 1.txt 

4. grep -v '^$' 1.txt 这样会过滤出哪些行 
会把非空行过滤出来 

5. '.' '*' 和 '.*' 分别表示什么含义'+'和''表示什么含义,这五个符号是否可以在grep中使用,是否可以在egrep、sed以及awk中使用 
'.' 表示一个任意的字符; 
'*' 表示前面紧邻的那个字符有零个或多个,即前面紧邻的那个字符可以不存在,也可以有多个; 
'.*' 表示零个或多个的任意字符,包括空行; 
'+' 表示前面紧邻的那个字符有一个或多个; 
'' 表示前面紧邻的那个字符有零个或一个; 
grep和sed可以使用'.' 、 '*' 和 '.*',但是不能使用'+'和'' egrep和awk全部可以使用。 

6. grep 里面用到一个 {} ,它用在什么情况下 
{ },其内部为数字,表示前面的字符要重复的次数。数字可以是单个数字{n},也可以是一个区间{n1,n2}。注意,在字符串中,{ }左右都需要加上脱意字符 ‘’。 
例如, grep 'o{3}' /etc/passwd //输出有3连续的'o'的行 

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

8. sed -i 's/.*ie//;s/["|&].*//' file 这条命令表示什么操作呢 
该命令由;分割了两部分,首先第一部分表示把file中出现的以ie结尾的字符串删除, 
第二部分是把file中以"或|或&开头的字符串删除 

9. 如何删除一个文档中的所有数字或者字母 
删除所有数字: sed -i 's/[0-9]//g' file 
删除所有字母: sed -i 's/[a-z]//g' file 

10. 截取日志1.log的第一段(以空格为分隔符), 按数字排序、然后去重,但是需要保留重复的数量如何做 
awk '{print $1}' 1.log |sort -n|uniq -c|sort -n 

11. 使用awk过滤出1.log中第7段(空格分隔)为'200' 并且第8段为'11897'的行。 
awk '$7 == "200" && $8 == "11897"' 1.log 

12. 请比较这两个命令的异同: grep -v '^[0-9]' 1.txt 和 grep '^[^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 
awk -f ':' '{print $0}' 1.txt //打印所有的行 ,即整个记录 
awk -f ':' '$7=1 {print $0}' 1.txt //以冒号为分隔符,输出时将每行的第七段的内容更改为1,并打印所有的行,此时并不会连带分隔符一起输出 

14. 使用grep过滤某个关键词时,如何把包含关键词的行连同上面一行打印出来,那下面一行呢同时上面和下面都打印出来呢 
grep -b1 上面一行 
grep -a1 下面一行 
grep -c1 上下各一行