我可以在我想要的字符串之前或之后 grep 一定数量的行吗? [复制]

Posted

技术标签:

【中文标题】我可以在我想要的字符串之前或之后 grep 一定数量的行吗? [复制]【英文标题】:Can I grep a certain amount of lines before or after a string I want? [duplicate] 【发布时间】:2019-01-07 02:12:27 【问题描述】:

假设我正在使用 lshw 来获取系统内存,并且我希望将其打印出来,以便仅获取系统内存选项。你能指定在 grep 中的字符串之前或之后要打印多少行吗?下面输出一个 lshw 命令的 sn -p 供参考:

 description: Computer
    width: 64 bits
  *-core
       description: Motherboard
       physical id: 0
     *-memory
          description: System memory
          physical id: 0
          size: 23GiB
     *-cpu
          product: Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz
          vendor: Intel Corp.
          physical id: 1
          bus info: cpu@0
          capacity: 1896MHz
          width: 64 bits

我可以使用 lshw | grep size | awk -F: 'print $2' 获取 23 GiB 部分,但我想看看是否有办法使用 grep 获取文本块以获取完整内存部分。

【问题讨论】:

您在寻找-C,例如grep -C 5? C 用于上下文。您还可以在匹配后显式显示行 -Before 和 -A 在 grep 中使用 -A(之后)和 -B(之前)命令行选项。 或 -A 和 -B 进行精细控制。 @L3viathan 是的,你完全正确。非常感谢,我更改了我的帖子并记在你的名下。 【参考方案1】:

@L3viathan 帮我弄清楚了。 Grep 有一个 -A 标志,可让您指定字符串后面的行数。您还可以使用 -B 标志来指定字符串之前需要多少行。

后例:

lshw | grep *-memory -A 3

输出:

     *-memory
      description: System memory
      physical id: 0
      size: 23GiB

前例:

lshw | grep size -B 3

输出:

     *-memory
      description: System memory
      physical id: 0
      size: 23GiB

【讨论】:

以上是关于我可以在我想要的字符串之前或之后 grep 一定数量的行吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式和 grep 仅匹配只有一位数或两位数的字符串

十进制数格式问题

grep

grep零宽断言&正则表达式

Python如何删除文本文件中特定字符串之后或之前的特定行数

如何让“grep”在 grep 行上方显示一行五行?