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