我正在使用grep -C 1 "matching string" "xty.pom"
这适用于Linux机器,但相同的代码不适用于AIX,SunOS_x64,HPUX等其他平台。
有没有替代方法,以便相同的代码逻辑可以在所有平台上运行?
答案 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
Sun / Solaris上的本机awk是众所周知的错误填充。请改用nawk
或
更好的是/usr/xpg4/bin/awk
或/usr/xpg6/bin/awk