首页 > 代码库 > 第14章 grep、sed、awk 正则表达式
第14章 grep、sed、awk 正则表达式
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 -n ‘abc|123‘ 1.txt
4. grep -v ‘^$‘ 1.txt 这样会过滤出哪些行?
‘^$‘ 表示空白行
grep -v ‘^$‘ 1.txt 把空白行过滤掉
5. ‘.‘ ‘*‘ 和 ‘.*‘ 分别表示什么含义?‘+‘和‘?‘表示什么含义,这五个符号是否可以在grep中使用,是否可以在egrep、sed以及awk中使用?
‘.‘ 表示一个任意的字符;
‘*‘ 表示前面紧邻的那个字符有零个或多个,即前面紧邻的那个字符可以不存在,也可以有多个;
‘.*‘ 表示零个或多个的任意字符,包括空行;
‘+‘ 表示前面紧邻的那个字符有一个或多个;
‘?‘ 表示前面紧邻的那个字符有零个或一个;
grep和sed可以使用‘.‘ ‘*‘ 和 ‘.*‘ 但是不能使用‘+‘和‘?‘ egrep和awk全部可以使用。
6. grep 里面用到一个 {} ,它用在什么情况下?
{ },其内部为数字,表示前面的字符要重复的次数。数字可以是单个数字{n},也可以是一个区间{n1,n2}。注意,在字符串中,{ }左右都需要加上脱意字符 ‘\’。
例如, egrep ‘o{3}‘ /etc/passwd //输出有3连续的‘o‘的行
7. sed有一个选项,可以直接更改文本文件,是哪个选项?
-i
8. sed -i ‘s/.*ie//;s/["|&].*//‘ file 这条命令表示什么操作呢?
.*ie 以ie结尾的字符串; ["|&].* | 或& 开头的字符串
该命令由;分割了两部分,首先第一部分表示把file中出现的以ie结尾的字符串删除,
第二部分是把file中以"或|或&开头的字符串删除
9. 如何删除一个文档中的所有数字或者字母?
删除所有数字 sed -i ‘s/[0-9]//g‘ file
删除所有字母 sed -i ‘s/[a-Z]//g‘ file
10. 截取日志1.log的第一段(以空格为分隔符), 按数字排序、然后去重,但是需要保留重复的数量如何做?
awk -F ‘:‘ ‘{print $1}‘ 1.log |sort -n |uniq -c
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
$0 表示整行
awk -F ‘:‘ ‘{print $0}‘ 1.txt 打印所有的行,即整个记录
awk -F ‘:‘ ‘$7=1 {print $0}‘ 1.txt //以冒号为分隔符,输出时将每行的第七段的内容更改为1,并打印所有的行,此时并不会连带分隔符一起输出
14. 使用grep过滤某个关键词时,如何把包含关键词的行连同上面一行打印出来,那下面一行呢?同时上面和下面都打印出来呢?
grep -B1 上面一行
grep -A1 下面一行
grep -C1 上下各一行}‘ 1.log |sort -n|uniq -c|sort -n
扩展阅读:
1. grep 其实还可以这样使用:
把一个目录下,过滤所有*.php文档中含有eval的行
grep -r --include=“*.php" ‘eval‘ /data/
实际应用:看看你的网站程序有没有被黑客入侵 http://www.lishiming.net/thread-1028-1-1.html
2. awk用print打印单引号 http://www.lishiming.net/thread-1738-1-1.html
3. 打印文件中特定的某行到某行之间的内容 http://www.lishiming.net/thread-559-1-1.html
4. awk 中使用外部shell变量 http://www.lishiming.net/thread-199-1-1.html
5. awk 合并一个文件 http://www.lishiming.net/thread-493-1-1.html
6. grep -q 用于if 逻辑判断 http://www.lishiming.net/thread-439-1-1.html
7. awk 计算1到100的和 http://www.lishiming.net/thread-384-1-1.html
8. 把一个文件多行连接成一行 http://www.lishiming.net/thread-266-1-1.html
9. awk中gsub函数的使用 http://www.lishiming.net/thread-200-1-1.html
10. sed在文件中某一行最后添加一个数字 http://www.lishiming.net/thread-288-1-1.html
11. awk 截取指定多个域为一行 http://www.lishiming.net/thread-224-1-1.html
12. sed删除某关键字的下一行到最后一行 http://www.lishiming.net/thread-213-1-1.html
13. grep 或 egrep 或awk 过滤两个或多个关键词 http://www.lishiming.net/thread-198-1-1.html
14. 用awk编写生成以下结构文件的程序 http://www.lishiming.net/thread-5494-1-1.html
15. 如何使用sed打印1到100行包含某个字符串的行 http://www.lishiming.net/thread-1048-1-1.html
16. 把两个文件中相同的行合并成一行 http://www.lishiming.net/thread-945-1-1.html
第14章 grep、sed、awk 正则表达式