egrep が SunOS システムで期待どおりに動作しません。

egrep が SunOS システムで期待どおりに動作しません。

これが私がSunOSで達成したいものです:

[text_text=text][text=text][text]または同じパターンのみがtext有効なパターンです。つまり、textにあるすべてのパターンを意味します0-9,a-z,A-Z, space, newline, tab, enter。他のモードは無効です。つまり、egrep -vキャプチャする必要があります。[[[text]、、、、[text]]]などの[textパターンtext]も無効です。

Linuxボックス(RHEL)で次のコマンドを使用しましたが、正しく機能しました。

egrep -v "^[ ]*([a-zA-Z0-9\t\n\v\f\r ]*|\[{1}[_a-zA-Z0-9\t\n\v\f\r ]*(=[a-zA-Z0-9\t\n\v\f\r ]*)?\]{1})[ ]*$" file1

ファイル1:

[FEATURE_ID=2]
[FEATURE_REV=1]
[NO_OF_BYTES=18]
001203658080400160b9d0ae45000080
[CRC]
c068

RHEL BOXでは、egrep -v上記のステートメントは期待どおりに出力を提供しません。

同じ操作が機能せずに出力を提供するので、Solarisでこれをどのように達成できますか?

[FEATURE_ID=2]
[FEATURE_REV=1]
[NO_OF_BYTES=18]
[CRC]

答え1

Solarisの場合と同様に、/usr/bin/egrepPOSIXと互換性のない従来の実装が/usr/xpg4/bin/egrepありますが、POSIXと互換性のある実装があり、POSIX以外にはほとんど何もありません。既存の POSIX 以前の Solaris アプリケーションを実行しない限り、次の点を確認してください。/usr/xpg4/bin/usr/bin$PATH

GNUツール(Linuxに精通しているツール)には、POSIXで指定されたもの以上の多くの機能があることがよくあります。移植性が必要な場合は、POSIXを使用してください。 POSIXには定義はありませんegrep。これは広範な同義語です。grep -Eつまりgrep拡張正規表現通事論。

Solarisは発生回数の計算を/usr/bin/egrepサポートしていません{…}。ここでのみ{1}使用して効果がないので、そのまま捨ててください。

egrepSolaris や Solaris での実装は、grep -E制御文字のバックスラッシュエスケープをサポートしません。これはGNU拡張です。 POSIX はバックラッシュ文字を定義しません。[:space:]代わりにクラスを使用してください\t\n\v\f\r

LC_CTYPE=C grep -Ev '^[ ]*([[:alnum:][:space:]]*|\[[_[:alnum:][:space:]]*(=[[:alnum:][:space:]]*)?\])[ ]*$' file1

関連情報