在 SunOS 5.9 中 grep 周围的行

grep surrounding lines in SunOS 5.9

尝试使用 SunOS 5.9 grep 周围的行,通常我会使用带有 -B 和 -A 的 grep 来这样做:

grep -B 3 -A 2 foo README.txt

但是,在 SunOS 5.9 中,grep 不支持此功能并显示此错误消息:

grep: illegal option -- A

下面是我从 "man grep" 得到的:http://www.freebsd.org/cgi/man.cgi?query=grep&apropos=0&sektion=0&manpath=SunOS+5.9&format=html

我的示例将尝试使用关键字 "Mirror" 和代表其子镜像状态的那些行进行 grep。 grep 的输入是:

d6: Mirror
    Submirror 0: d61
      State: Okay
    Submirror 1: d62
      State: Okay
    Pass: 1
    Read option: ***
    Write option: ***
    Size: ***

d61: Submirror of d6
    State: Okay
    Size: ***
    Stripe 0:
    Device     Start Block  Dbase        State Reloc Hot Spare
    CCC          0     No            Okay   Yes


d62: Submirror of d6
    State: Okay
    Size: ***
    Stripe 0:
    Device     Start Block  Dbase        State Reloc Hot Spare
    BBB          0     No            Okay   Yes

在上面的例子中,我想得到

d6: Mirror
    Submirror 0: d61
      State: Okay
    Submirror 1: d62
      State: Okay

我应该如何在 SunOS 5.9 中执行此操作?

试试这个:

sed -n '/Mirror/,/Pass:/{/Pass:/d;p;}' file

输出:

d6: Mirror
    Submirror 0: d61
      State: Okay
    Submirror 1: d62
      State: Okay

从您的示例来看,您似乎只想在匹配 之后打印行 。如果是这样,那么您可以使用这个 awk 脚本:

awk '/Mirror/ { c = 5 } c && c--' file

当模式匹配时它设置 c 为 5,只要 c 大于 0 就打印行(所以接下来的 4 行)。