所有机器上的 Grep“-C”命令
Posted
技术标签:
【中文标题】所有机器上的 Grep“-C”命令【英文标题】:Grep "-C" command on all machine 【发布时间】:2016-12-24 23:50:30 【问题描述】:我正在使用grep -C 1 "matching string" "xty.pom"
这适用于 Linux 机器,但相同的代码不适用于 AIX、SunOS_x64、HPUX 等其他平台。
是否有任何替代方案,以便相同的代码逻辑适用于所有平台?
【问题讨论】:
edit 您的问题显示minimal reproducible example,包括简洁、可测试的样本输入、预期输出以及您迄今为止尝试过的内容,以便我们为您提供帮助。 【参考方案1】:这将像 grep -C 1 "matching string"
一样工作,但应该在不支持 grep 的 -C
选项的平台上工作:
awk '/matching string/print last; f=2 fprint; f-- last=$0' File
工作原理
/matching string/print last; f=2
如果当前行匹配正则表达式matching string
,则打印上一行(保存在last
中)并将f
设置为2。
fprint; f--
如果f
不为零,则打印当前行并递减f
。
last=$0
设置last
等于当前行的内容。
改进
通过一些小的改动,我们可以更好地处理重叠匹配:
awk '/a/if (NR>1 && !f)print last; f=3 f>1print ff-- last=$0'
作为具有重叠匹配的输出示例:
$ printf '%s\n' a a b | awk '/a/if (NR>1 && !f)print last; f=3 f>1print ff-- last=$0'
a
a
b
太阳/Solaris
众所周知,Sun/Solaris 上的本机 awk 充满了错误。改用nawk
或
更好的是/usr/xpg4/bin/awk
或/usr/xpg6/bin/awk
【讨论】:
只有当正则表达式没有出现在文件开头或连续行上时,awk 命令才会表现得像grep -C 1
。尝试使用 grep -C 1
和 awk 命令在包含 a\na\nb\n
(其中 \n
是文字换行符)的文件中搜索 a
并注意 grep 按原样输出文件(a\na\nb\n
),而 awk输出\na\na\na\nb\n
.以上是关于所有机器上的 Grep“-C”命令的主要内容,如果未能解决你的问题,请参考以下文章
试图制作一个命令页面来列出我的不和谐机器人上的所有命令,但不知道如何[关闭]