4.13 打印不同行或样式之间的文本
有时候,可能需要根据某些条件打印文本的某一部分,比如行号范围以及由起止样式所匹配的文本范围等。让我们来看看如何实现这些需求。
4.13.1 预备知识
我们可以用awk
、grep
和sed
这类工具来根据条件打印某些文本区域。不过,我仍然觉得awk
是最简单明了的方法。下面就看看如何使用awk
完成这项任务。
4.13.2 实战演练
要打印出从M行到N行这个范围内的所有文本,使用下面的语法:
- $ awk 'NR==M, NR==N' filename
也可以用stdin作为输入:
- $ cat filename | awk 'NR==M, NR==N'
把M和N换成具体的数字:
- $ seq 100 | awk 'NR==4,NR==6'
- 4
- 5
- 6
要打印处于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
中的样式为正则表达式。
4.13.3 参考
4.7节讲解了awk
命令。