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 命令相关知识。