linux - 所有机器上的 Grep "-C"命令

标签 linux grep aix hp-ux sunos

我正在使用 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

工作原理

  • /匹配字符串/{print last; f=2}

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

  • f{打印; 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

太阳/索拉里斯

众所周知,Sun/Solaris 上的原生 awk 漏洞百出。改用 nawk 或 更好的是 /usr/xpg4/bin/awk/usr/xpg6/bin/awk

关于linux - 所有机器上的 Grep "-C"命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39011573/

相关文章:

linux - 将 grep 传递给 bash 中的变量

适用于 AIX 6.1+ 的 GIT 客户端

linux - socat 两个串口在一起

java - 无法打开我的 Android 应用程序的应用程序包目录

linux - grep -R 每个文件一个结果

c - 静态链接的最近函数在 C 中无法正确求值

c++ - 不同的对象指针值及其this指针

linux - 如何将口语音频与引用录音进行比较 - 语言学习

c++ - 从未收到发送到本地主机端口的数据包

linux - 一起使用 find、grep 和 sed