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'


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM