ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

【Shell案例】【while循环、正则表达式、sed、awk、grep】5、打印空行的行号

2022-04-28 20:01:53  阅读:197  来源: 互联网

标签:Shell grep while sed awk nowcoder let txt bash


描述
写一个 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,grep,while,sed,awk,nowcoder,let,txt,bash
来源: https://www.cnblogs.com/liujinhui/p/16204258.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有