目录
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'