在bash中删除文本文件的多个行块

gno*_*ome 0 bash text sed

假设一个包含40行数据的文本文件.如何使用bash脚本删除第3行到第10行,第13行到第20行,第23行到第30行,第33行到第40行?

我已经知道如何删除第3行到第10行了sed,但是我想知道是否有办法只使用一个命令行来完成所有删除操作.我可以使用,for loop但问题是,每次循环迭代时,行号将被更改,并且需要对要删除的行号进行一些额外的计算.

Ken*_*ent 5

这是一个awk oneliner,无论你的文件有40行还是40k行,都能满足你的需求:

awk 'NR~/[12]$/' file
Run Code Online (Sandbox Code Playgroud)

例如,有50行:

kent$ seq 50|awk 'NR~/[12]$/'  
1
2
11
12
21
22
31
32
41
42
Run Code Online (Sandbox Code Playgroud)