Shell 打印指定行或模式之间的文本,我们有时候可能需要根据某些条件打印文件的一部分,比如由指定行号或起止模式所匹配的文本范围。

预备知识

awkgrepsed都可以根据条件打印部分行。最简单的方法是使用grep打印匹配模式的行。不过,最全能的工具还是awk

实战演练

要打印指定行或模式之间的文本,可以依照以下步骤。
(1) 打印从M行到N行之间的文本:

$ awk 'NR==M, NR==N' filename

awk也可以从stdin处读取输入:

$ cat filename | awk 'NR==M, NR==N'

(2) 把MN换成具体的数字:

$ seq 100 | awk 'NR==4,NR==6'
4
5
6

(3) 打印位于模式start_patternend_pattern之间的文本:

$ awk '/start_pattern/, /end_pattern/' filename

例如:

$ cat section.txt
line with pattern1
line with pattern2
line with pattern3
line end with pattern4
line with pattern5

$ awk '/pa.*3/, /end/' section.txt
line with pattern3
line end with pattern4

awk中使用的模式为正则表达式,本章内容可以参考awe 命令相关知识。

最后修改:2024 年 05 月 20 日
如果觉得我的文章对你有用,请随意赞赏