所有机器上的Grep“-C”命令

时间:2016-08-18 06:47:23

标签: linux grep aix hp-ux sunos

我正在使用grep -C 1 "matching string" "xty.pom"

这适用于Linux机器,但相同的代码不适用于AIX,SunOS_x64,HPUX等其他平台。

有没有替代方法,以便相同的代码逻辑可以在所有平台上运行?

1 个答案:

答案 0 :(得分:3)

这将像grep -C 1 "matching string"一样运行,但应该在不支持grep的-C选项的平台上运行:

awk '/matching string/{print last; f=2} f{print; f--} {last=$0}' File

如何运作

  • /matching string/{print last; f=2}

    如果当前行与正则表达式matching string匹配,则打印上一行(已保存在last中)并将f设置为2.

  • f{print; f--}

    如果f非零,则打印当前行并递减f

  • last=$0

    last设置为等于当前行的内容。

改进

通过一些细微的更改,我们可以更好地处理重叠匹配:

awk '/a/{if (NR>1 && !f)print last; f=3} f>1{print} f{f--} {last=$0}'

作为重叠匹配的输出示例:

$ printf '%s\n'   a a b |  awk '/a/{if (NR>1 && !f)print last; f=3} f>1{print} f{f--} {last=$0}'
a
a
b

太阳/的Solaris

Sun / Solaris上的本机awk是众所周知的错误填充。请改用nawk或 更好的是/usr/xpg4/bin/awk/usr/xpg6/bin/awk