Linux脚本练习之script063-打印空行的行号

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux脚本练习之script063-打印空行的行号相关的知识,希望对你有一定的参考价值。

script063

题目

题目来源于 SHELL5 打印空行的行号

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

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

a
b

c

d

e


f

你的脚本应当输出:

3
5
7
9
10

脚本一

使用 grep -n 命令就可以显示文件匹配到内容的行号,而 grep 命令可以通过正则表达式来匹配。"^$" 在正则表达式中就表示匹配空行。找到空行后由于结果中会显示一个冒号,所以需要通过 tr 命令的 -d 选项删除冒号。

 grep -n "^$" nowcoder.txt | tr -d ':'

脚本二

使用 awk 命令的内置函数 length() 可以判断该行的长度,如果长度为零则表示是空行,则打印该行的行号,内置变量 NR 表示行号。

 awk 'if(length($0)==0) print NR' nowcoder.txt

脚本三

awk 命令也支持正则表达式匹配,也可以使用 ^$ 匹配空行然后输出行号。

awk '/^$/ print NR' nowcoder.txt

脚本四

还可以通过下面的方式判断空白行,NF 表示每行的列个数,如果为零则表示是空行则输出该行行号。

awk 'NF==0print NR' nowcoder.txt

脚本五

还可以通过读取文件每行内容,通过 -z 判断文件行所表示的字符串是否是空字符串,如果是则表示该行是空行,则输出该行行号,而行号是由一个自定义的变量来记录的,每遍历一行,则该变量加一。

#!/bin/bash

i=0
while read line; do
  i=$(($i+1))
  if [ -z "$line" ]; then
      echo "$i"
  fi
done < nowcoder.txt

以上是关于Linux脚本练习之script063-打印空行的行号的主要内容,如果未能解决你的问题,请参考以下文章

Linux脚本练习之script076-打印等腰三角形

Linux脚本练习之script076-打印等腰三角形

Linux脚本练习之script065-打印字母数小于8的单词

Linux脚本练习之script077-打印只有一个数字的行

Linux脚本练习之script060-打印文件的最后5行

Linux脚本练习之script037-打印无密码用户。