Linux Grep“-";所有机器上的命令

Linux Grep“-";所有机器上的命令,linux,grep,aix,hp-ux,sunos,Linux,Grep,Aix,Hp Ux,Sunos,我使用的是grep-c1“匹配字符串”“xty.pom” 这可以在Linux机器上运行,但同样的代码在AIX、SunOS_x64、HPUX等其他平台上不起作用 是否有任何替代方案,以便在所有平台上使用相同的代码逻辑?这将像grep-C 1“匹配字符串”一样工作,但应在不支持grep的-C选项的平台上工作: awk '/matching string/{print last; f=2} f{print; f--} {last=$0}' File 工作原理 /matching string/{p

我使用的是
grep-c1“匹配字符串”“xty.pom”

这可以在Linux机器上运行,但同样的代码在AIX、SunOS_x64、HPUX等其他平台上不起作用


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

这将像
grep-C 1“匹配字符串”
一样工作,但应在不支持grep的
-C
选项的平台上工作:

awk '/matching string/{print last; f=2} f{print; f--} {last=$0}' File
工作原理
  • /matching string/{print last;f=2}

    如果当前行与regex
    匹配字符串
    ,则打印上一行(保存在
    最后一行
    )并将
    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 Sun/Solaris上的本机awk充满了臭名昭著的bug。改用
nawk

更好的是
/usr/xpg4/bin/awk
/usr/xpg6/bin/awk

当regexp不出现在文件开头或连续行上时,awk命令的行为与
grep-c1
类似。尝试使用
grep-c1
和awk命令在包含
a\na\nb\n
(其中
\n
是文字换行符)的文件中搜索
a
,注意grep按原样输出文件(
a\na\nb\n
),而awk输出
\na\na\nb\n
。您的问题将显示一个简洁、可测试的示例输入、预期输出以及您迄今为止所尝试的内容,我们将为您提供帮助。