4.13 打印不同行或样式之间的文本

有时候,可能需要根据某些条件打印文本的某一部分,比如行号范围以及由起止样式所匹配的文本范围等。让我们来看看如何实现这些需求。

4.13.1 预备知识

我们可以用awkgrepsed这类工具来根据条件打印某些文本区域。不过,我仍然觉得awk是最简单明了的方法。下面就看看如何使用awk完成这项任务。

4.13.2 实战演练

要打印出从M行到N行这个范围内的所有文本,使用下面的语法:

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

也可以用stdin作为输入:

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

把M和N换成具体的数字:

  1. $ seq 100 | awk 'NR==4,NR==6'
  2. 4
  3. 5
  4. 6

要打印处于start_patternend_pattern之间的文本,使用下面的语法:

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

例如:

  1. $ cat section.txt
  2. line with pattern1
  3. line with pattern2
  4. line with pattern3
  5. line end with pattern4
  6. line with pattern5
  7. $ awk '/pa.*3/, /end/' section.txt
  8. line with pattern3
  9. line end with pattern4

用于awk中的样式为正则表达式。

4.13.3 参考

4.7节讲解了awk命令。