题目: 输出一个文本文件中的所有空行的行号;
思路一:关于行号的第一思路是: grep -n 所有有了如下解题方法:
grep -n '^$' test.txt | awk -F ':' {print $1}
[解析]:
grep -n 打印满足要求的行,并显示行号; 这里筛选的条件是以 $ 开头的行,也就是空行; 打印结果格式为:【行号:行内容】
这种情况下,就要用到awk 进行筛选了,以『:』 为分隔符, 筛选第一部分;
【扩展解析】:
1) grep -n 打印满足要求的行,并显示行号;
2) grep -v 打印不满足要求的行,并显示行号;
3) grep -i 打印满足要求的行,忽略大小写;
4) grep -A2 打印满足要求的行,及其下面两行;
5) grep -B2 打印满足要求的行,及其上面两行;
6) grep -C2 打印满足要求的行,及其上下各两行;
7) grep '[0-9]' 打印包含数字的行;
【扩展举例】:
1)过滤出不包含数字的行: grep -nv '[0-9]' test.txt
2) 过滤出不以字母开头的行: grep -nv '^[a-zA-Z]' test.txt
3)去掉一个文件中所有的空行: grep -v '^$' test.txt
思路二:通过题解,学会一种新的方法:
awk '{if(NF==0) print NR}' test.txt
【解析】:
1)awk 两个重要的常量参数: NR:记录文件每一行的行号,从1开始; NF:记录文件每一行的列数,按照分隔符为划分;
2)awk 和if连用: 用法是: awk '{if($1==1) print 1; else if($1==2) print 2; else print 3}'