所有计算机上的 Grep "-C"命令



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

这可以在Linux机器上工作,但相同的代码不能在其他平台上工作,如AIX, SunOS_x64, HPUX。

是否有任何替代方案,以使相同的代码逻辑在所有平台上工作?

这将像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 '%sn'   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

相关内容

  • 没有找到相关文章

最新更新