これが私が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/egrep
POSIXと互換性のない従来の実装が/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}
使用して効果がないので、そのまま捨ててください。
egrep
Solaris や Solaris での実装は、grep -E
制御文字のバックスラッシュエスケープをサポートしません。これはGNU拡張です。 POSIX はバックラッシュ文字を定義しません。[:space:]
代わりにクラスを使用してください\t\n\v\f\r
。
LC_CTYPE=C grep -Ev '^[ ]*([[:alnum:][:space:]]*|\[[_[:alnum:][:space:]]*(=[[:alnum:][:space:]]*)?\])[ ]*$' file1