Shell 打印空行的行号/去掉空行

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'

去掉空行

题目

写一个 bash脚本以去掉一个文本文件 nowcoder.txt中的空行
示例:
假设 nowcoder.txt 内容如下:
abc

567

aaa
bbb

ccc

你的脚本应当输出:
abc
567
aaa
bbb
ccc

题解

1.匹配空行直接删除

sed '/^$/d' nowcoder.txt

2.或者匹配到空行之后反向输出

sed -n '/[^$]/p'  nowcoder.txt
grep -v '^$'  nowcoder.txt

sed -n 输出操作的行
p:打印匹配到的内容常与-n结合使用
正则部分: [^ ] 代 表 以 后 面 跟 着 的 字 符 为 开 头 , ] ^代表以后面跟着的字符为开头, ]代表以前面的字符为结尾;
^$联合使用,中间不加任何字符数字,代表匹配空行;
[ ] 在shell正则中表示取反

3.找出不是空行的

awk '!/^$/{print $0}' nowcoder.txt

awk 'NF!=0{print}'
cat nowcoder.txt | awk NF

NF怎么有两个意思啊?
NF(Field): 每一行($0)拥有的字段总数

NF只记录有数据的行,可以理解成NF存在(true)则输出?空行NF=0,0为假不会打印该行。

Shell 去掉所有包含this的语句

题目

写一个 bash脚本以实现一个需求,去掉输入中含有this的语句,把不含this的语句输出
示例:
假设输入如下:
that is your bag
is this your bag?
to the degree or extent indicated.
there was a court case resulting from this incident
welcome to nowcoder

你的脚本获取以上输入应当输出:
to the degree or extent indicated.
welcome to nowcoder

说明:
你可以不用在意输出的格式,包括空格和换行

题解

此题的要求是:去掉符合条件的语句,sed对行进行增删改操作
这里匹配到的字符后面要加命令

sed '/this/d'

解法还可以是:打印出不符合条件的语句,grep过滤语句
找出一行内容中含有this的语句,这里可以不用正则

grep -v 'this'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值