【问题标题】:why egrep doesn't work correctly on AIX?为什么 egrep 在 AIX 上不能正常工作?
【发布时间】:2017-05-02 07:02:20
【问题描述】:

我有一个简单的 egrep 用于搜索 C/C++ 主文件(通过搜索主函数):

egrep '^\s*(int|void)\s+main' *.c*

我也有 2 台机器,一台 Linux 一台 Aix。在 Linux 上,这个命令运行得非常好。在 Aix 上它不会 - 它不会返回结果。更重要的是,在 Aix 上,以下命令会返回结果:

egrep '^\s*(int|void)\s+' *.c*

这是什么原因?

【问题讨论】:

  • 请提供说明问题的具体输入。并让我们知道egrep --version 在每台机器上的内容。
  • 任何输入都可以: echo 'int main(' > tmp.c egrep '^\s*(int|void)\s+main' .c 至于版本:Linux 2.20,至于 Aix - 它拒绝提供它的版本(因此我没有写它), -v 什么都不做, --version 被认为是非法的,因为双重 --。

标签: regex linux grep aix


【解决方案1】:

至少根据我的测试,AIX 中提供的非 GNU egrep 显然不支持 '\s' 转义序列。

尝试以下方法:

egrep '^[ \t]*(int|void)[ \t]+main' *.c*

这对我来说似乎适用于 AIX pgrep。

(但仍然想知道 egrep '^\s*(int|void)\s+' *.c* 如何为您工作,因为它似乎对我不起作用)

【讨论】:

  • 也有同样的疑惑。无论如何,这完美无缺。非常感谢。
  • \s 只是 POSIX 字符类 [:space:] 的 GNU 简写,因此原始正则表达式的 POSIX 等效项将是 egrep '^[[:space:]]*(int|void)[[:space:]]+main' *.c* 以匹配所有空格,而不仅仅是空白和制表符。第二个正则表达式将在行首匹配 intsvoids,它会 not 匹配 OP 希望它匹配的内容,并注意他只是说它产生输出,不一定是预期的或理想的输出。顺便说一句,egrep 已经被 grep -E 弃用了好几年了。
猜你喜欢
  • 2014-12-02
  • 2016-07-16
  • 2019-01-04
  • 2020-09-03
  • 2016-10-10
  • 2016-10-24
  • 2017-02-27
  • 2017-07-08
  • 2014-11-23
相关资源
最近更新 更多