【Shell案例】【while循环、正则表达式、sed、awk、grep】5、打印空行的行号
2022/4/29 7:13:57
本文主要是介绍【Shell案例】【while循环、正则表达式、sed、awk、grep】5、打印空行的行号,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
描述
写一个 bash脚本以输出一个文本文件 nowcoder.txt中空行的行号,可能连续,从1开始
示例:
假设 nowcoder.txt 内容如下:
a
b
c
d
e
f
你的脚本应当输出:
3
5
7
9
10
方法1:for循环遍历+判断【不对】
#!/bin/bash let j=0 for i in `cat nowcoder.txt` do let j++ if [[ i -eq "" ]];then echo $j fi done
方法2:while循环,用箭头传递数据,read 文件
【-z $i表示i对应的内容为空】
#!/bin/bash let j=1 while read i do if [[ -z $i ]]; then echo $j fi let j++ done < nowcoder.txt
【使用==直接判空】
#!/bin/bash let j=1 while read i do if [[ $i == '' ]]; then echo $j fi let j++ done < nowcoder.txt
循环+管道传递数据
#!/bin/bash let j=1 cat nowcoder.txt | while read i do if [[ $i == '' ]]; then echo $j fi let j++ done
方法3:grep+正则表达式匹配
正则匹配空行\s(匹配任何空白字符:包括空格,制表符,换页符等等.等价于[ \f\n\r\t\v])且输出带行号. ^匹配输入字符串的开始位置,$匹配输入字符串的结束位置.该题匹配空行可以用 ^\s*$ 作为目标正则,不是唯一,可根据正则语法自行灵活搭配拆分;
awk是文本分析工具,可用于分割字符,打印行号等功能
https://www.runoob.com/linux/linux-comm-awk.html
awk用于去掉冒号
#!/bin/bash grep -n '^\s*$' nowcoder.txt|awk -F: '{print $1}'
方法4:只用awk
//作为包含awk正则匹配模式的符号, NR属于awk内部变量,代表:已经读出的记录数,就是行号;
正则表达式可以替换为空,即
awk '/^$/ {print NR}'
#!/bin/bash awk '/^\s*$/{print NR}' nowcoder.txt
方法5:使用sed
利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件
sed使用: -n:使用安静(silent)模式;【仅显示处理后的结果】 //是sed正则表达式匹配模式, 最后一个=,=作为sed命令打印行号: 例如(sed = nowcoder.txt),该命令会输出文件内容,且给每一行都加上行号,但是行号都在对应行内容的上一行,独立成行,因此使用-n,忽略内容等输出,只有经过sed特殊处理的那一行(或者动作)才会被列出来;
https://www.runoob.com/linux/linux-comm-sed.html
#!/bin/bash sed -n '/^\s*$/=' nowcoder.txt
这篇关于【Shell案例】【while循环、正则表达式、sed、awk、grep】5、打印空行的行号的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-11正则表达式学习:入门指南与实践技巧
- 2024-08-15正则表达式入门:基础教程与实践指南
- 2024-01-0939. 干货系列从零用Rust编写负载均衡及代理,正则及格式替换
- 2024-01-08如何编写高效的正则表达式?
- 2023-12-29"Matlab中的正则表达式:强大而灵活的工具"
- 2023-09-30这个正则 为啥同样的单号第二个就提取不出来?
- 2023-06-086.2 re 正则表达式
- 2023-06-06将字符串里的\x01,\x02这些替换掉用正则表达式无效?
- 2023-05-24正则表达式详解
- 2023-05-17我让gpt写了一段正则表达式代码,可是运行报错,可以帮忙看看哪里出了问题?