首页 > 解决方案 > BASH - 从文件部分读取行

问题描述

我有一个格式如下的文件:

[SITE1]
north
west

[MOTOR]
west
south
north

[AREA]
west
east
north

[CLEAR]

我需要做的是从特定部分读取所有值。

例如:读取 AREA 并返回:

west
east
north

我在网上找到的示例是针对具有键值对的 ini 文件的。任何人都可以帮助建议我如何做到这一点?

谢谢

标签: bashfileparsing

解决方案


使用sed

category=MOTOR; sed -nE "/^\[$category\]$/{:l n;/^(\[.*\])?$/q;p;bl}" /path/to/your/file

它不会做任何事情,直到它与包含目标类别的行匹配,此时它进入一个循环。在这个循环中,它消耗一行,如果它是空行或另一个类别(或文件末尾)则退出,否则打印该行。

使用的sed命令如下:

  • /pattern/当前行与模式匹配时执行下一个命令或命令组
  • {commands}重新组合命令,例如有条件地执行它们。
  • :l定义一个名为“l”的标签,您可以跳转到该标签。
  • n要求sed开始下一行工作。
  • q退出
  • p打印当前行
  • bl跳转到“l”标签

你可以在这里试试


推荐阅读