Solaris grepと正規表現?

Solaris grepと正規表現?

私たちは、ほとんどすべてのUnix互換システムで実行されるGNUmakefileを作成する方法を見つけようとしています。私たちは使用していますが、egrepMinGWでは失敗します。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 . . .
...

-E私はそれを見ることができず、Posixでは-Fオプションです(おそらく逃した可能性があります)。私が見つけたSolarisとPOSIXの違いスタックオーバーフローにありますが、次のように指定されています。「SolarisにはPOSIXインタフェースの完全なセットがあります...」

Solarisはなぜgrep消費できないのです-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機能を利用するアプリケーションの場合は、これらの仕様で指定されているユーティリティの別のディレクトリを見つける前にPATHshまたはksh)またはpath()環境変数を設定する必要があります。 、、、、そして。csh/usr/xpg4/bin/bin/usr/bin/usr/ucb/usr/ccs/bin

拡張正規表現を使用する必要がある場合は、事前に設定して/usr/xpg4/bin使用PATHしてくださいgrep -E

おすすめ記事