【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、打印空行的行号的更多相关文章
- Shell 打印空行的行号
目录 Shell 打印空行的行号 题解 Shell 打印空行的行号 写一个 bash脚本以输出一个文本文件 nowcoder.txt中空行的行号,可能连续,从1开始 示例: 假设 nowcoder.t ...
- 1.Sed | Awk | Grep | Find
1.Sed | Awk | Grep | Find 可以参考的文档链接 CentOS7 查看 当前机器 已经启动的端口的Shell命令: netstat -lntup | awk -F' ' {'pr ...
- sed & awk & grep 专题( 鸟哥 )
grep, sed 与 awk 相当有用 ! gerp 查找, sed 编辑, awk 根据内容分析并处理. awk(关键字:分析&处理) 一行一行的分析处理 awk '条件类型1{动作1}条 ...
- 【转帖】vim/sed/awk/grep等文件批处理总结
vim/sed/awk/grep等文件批处理总结 https://www.cnblogs.com/cangqiongbingchen/p/9760544.html Vim相关操作 1.基础 * 和 # ...
- sed & awk & grep 专题
转载自:http://www.cnblogs.com/moveofgod/p/3540575.html grep, sed 与 awk 相当有用 ! gerp 查找, sed 编辑, awk 根据内容 ...
- linux下的文本处理命令sed&awk&grep
Sedsed 是个精简的.非交互式的编辑器.他能执行和编辑vi和emacs相同的编辑任务.sed编辑器不提供交互使用方式:只能在命令行输入编辑命令.指定文件名,然后在屏幕上察看输出.sed编辑器没有破 ...
- vim/sed/awk/grep等文件批处理总结
Vim相关操作 1.基础 * 和 # 对对当前光标所在的单词进行搜索 %匹配括号移动,包括 (, {, [ K 查看man手册 ga 查看ascii值 g CTRL-G 统计字数,使用Visual模式 ...
- grep命令打印前N行
想打印前5行,用head即可:grep xxx |head -n 5
- sed awk grep三剑客常用
sed的常用用法: awk的常用用法: grep的常用用法: 除了列出符合行之外,并且列出后10行. grep -A 10 Exception kzfinance-front.log 除了列出符合行之 ...
- Linux下sed,awk,grep,cut,find学习笔记
awk awk是一种程序语言,对文档资料的处理具有很强的功能.awk擅长从格式化报文或从一个大的文本文件中抽取数据. awk的命令格式为: awk [-F filed-separator] “comm ...
随机推荐
- 事件循环:微任务和宏任务在v8中实现的简单理解
微任务 在js中,当使用promise,会将当前任务加入事件执行的微任务队列,有且只有这一种方法可以,因为当使用了promise,在JS引擎中会触发VM::queueMicrotask,会向m_mic ...
- Rust变量用法与特征
变量用法与特征 变量绑定 let a = "hello world" 为何不用赋值而用绑定呢(其实你也可以称之为赋值,但是绑定的含义更清晰准确)?这里就涉及 Rust 最核心的原 ...
- @EqualsAndHashCode(callSuper = false) 解释
当我们的pojo使用@Data注解时,@Data默认包含的是:@EqualsAndHashCode(callSuper = false),但是我们的pojo有继承父类,我们可能需要重新定义这个注解为: ...
- 动态存储管理实战:GlusterFS
文件转载自:https://www.orchome.com/1284 本节以GlusterFS为例,从定义StorageClass.创建GlusterFS和Heketi服务.用户申请PVC到创建Pod ...
- DDD-领域驱动(四)-使用IMediator 实现领域事件
领域事件是指:一个领域中出触发的 集成事件是指:多个微服务之前产生的事件 核心对象 IMediator INotification INotificationHandler 引入:IMediator ...
- 微信电脑版DAT文件转图片工具
一键批量将微信聊天接受到的加密存储DAT图片文件转化为普通图片. 通过查看转化后的图片,您可以: (1)清理无用的历史图片,节省电脑硬盘存储空间. (2)恢复寻找重要照片资料. 下载地址:点此下载 微 ...
- 齐博x1文本代码标签的使用
文本标签虽然简单,但是使用的地方确实非常多的. {qb:tag name="XXXX" type="text"}推荐新闻{/qb:tag} 类似这种使用的频率是 ...
- python信息检索实验之向量空间模型与布尔检索
import numpy as np import pandas as pd import math def bool_retrieval(string): if string.count('and' ...
- F118校准(二)-- 操作步骤(使用任意品牌PG点屏,并使用PX01 PG校准F118)
1. 准备工作 硬件连接: CA310通过USB线材连接PC PX01通过USB线材连接PC F118通过灰排线连接PX01左上角的GPIO扩展口(如下图所示) 启动LcdTools软件,点击&quo ...
- JSP Webshell免杀设计
JSP Webshell免杀设计 @author:drag0nf1y 介绍 什么是Webshell? 被服务端解析执行的php.jsp文件 什么是RCE? remote command execute ...