Shell 打印空行的行号

目录

Shell 打印空行的行号

写一个 bash脚本以输出一个文本文件 nowcoder.txt中空行的行号,可能连续,从1开始

示例:
假设 nowcoder.txt 内容如下:

a
b

c

d

e


f

你的脚本应当输出:
3
5
7
9
10

题解

打印空行的行号,那么如何识别是不是空行 /^$/

sed -n '/^$/=' nowcoder.txt

-n 只显示处理的行号,/^$/匹配上的空行,= 打印行号

awk '$0==""{print NR} ' nowcoder.txt

grep -n 显示行号后,行号后面会添加:,所以我们需要删除冒号

awk处理流程
1.读入第一行,并将第一行的数据写入$0,$1,$2等变量当中
2.根据条件,判断是否需要进行后续的操作
3.完成所有操作和判断
4.重复1~3直到所有数据处理完。

所以如果要修改分隔符,一定要在开始读数据之前修改

 grep -n '^$' nowcoder.txt| awk 'BEGIN{FS=":"}{print $1}' 
 grep -n '^$' nowcoder.txt | awk -F: '{print $1}'
 grep -n '^$' nowcoder.txt |cut -d ':' -f 1

这里-F之前没有遇见过的写法,记录下来。-F指定分隔符

1.sed识别出冒号替换成空
2.sed识别出冒号删除 × sed的处理单位是一行,一整行都会被删掉

grep -n '^$'  nowcoder.txt| sed 's/\:/\ /g'
上一篇:【Linux命令】grep命令


下一篇:Linux通过PID查看进程完整信息