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

预备知识
awk、grep和sed都可以根据条件打印部分行。最简单的方法是使用grep打印匹配模式的行。不过,最全能的工具还是awk。
实战演练
要打印指定行或模式之间的文本,可以依照以下步骤。
(1) 打印从M行到N行之间的文本:
$ awk 'NR==M, NR==N' filename
awk也可以从stdin处读取输入:
$ cat filename | awk 'NR==M, NR==N'
(2) 把M和N换成具体的数字:
$ seq 100 | awk 'NR==4,NR==6'
4
5
6
(3) 打印位于模式start_pattern与end_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 命令相关知识。
极客教程