Solaris grep 和正则表达式?

Solaris grep 和正则表达式?

我们正在尝试找到一种方法来制作可在几乎所有 Unix 兼容系统上运行的 GNUmakefile。我们正在使用egrep,但在 MinGW 上失败了。我们切换到grep -E因为它是波斯克斯,但测试表明它在 Solaris 11 上失败。

makefile 中的典型用法是:

GREP ?= grep
...

IS_X86 := $(shell uname -m | $(GREP) -v "x86_64" | $(GREP) -i -c -E "i.86|x86|i86")
IS_X64 := $(shell uname -m | $(GREP) -i -c -E "(_64|d64)")

结果是:

grep: illegal option -- E
Usage: grep [-c|-l|-q] -bhinsvw pattern file . . .
grep: illegal option -- E
Usage: grep [-c|-l|-q] -bhinsvw pattern file . . .
...

我没有看到Posix 中-Eand-F是可选的(也许我错过了)。我发现Solaris 和 POSIX 之间的区别在 Stack Overflow 上,但它指出,“Solaris 有全套 POSIX 接口......”

为什么Solarisgrep无法消费-E?除了切换到 Solaris 之外,还有其他方法可以在 Solaris 上使用正则表达式支持吗egrep


我刚刚在 Solaris 11.3 计算机上设置了一个新的测试帐户,以确保我没有污染环境。

该帐户已添加:

# useradd -d /export/home/test -m -s /bin/ksh -c "Testing Accoung" test

80 blocks

PATH登录后检查:

test@solaris:~$ echo $PATH
/usr/bin:/usr/sbin

答案1

Oracle Solaris 文档 (XPG)

公用事业

如果 POSIX.2、POSIX.2a、XPG4、SUS 或 SUSv2 所需的行为与历史 Solaris 实用程序行为冲突,则该实用程序的原始 Solaris 版本将保持不变;中提供了符合标准的新版本/usr/xpg4/bin。对于希望利用 POSIX.2、POSIX.2a、XPG4、SUS 或 SUSv2 功能的应用程序,应在找到这些规范指定的实用程序的任何其他目录之前设置PATH(shksh) 或path( ) 环境变量,例如、、、 和。csh/usr/xpg4/bin/bin/usr/bin/usr/ucb/usr/ccs/bin

如果您必须使用扩展正则表达式,请/usr/xpg4/bin尽早设置PATH并使用grep -E.

相关内容