grep(1)
デフォルトではPOSIX基本正規表現を使用し、オプションとともに使用するとPOSIX拡張正規表現を使用し-E
ます。
POSIX正規表現では、特殊文字以外の文字は、エスケープされたときに未定義の動作をします。\s
、および貪欲でないマッチングの構文はありません。+?
。さらに、BREでは、+
および|
演算子は使用できず、グループ化を実行するには括弧をエスケープする必要があります。
POSIX文字クラス [[:space:]]
とは、それぞれとの[[:alnum:]_]
移植可能な代替手段です。\s
\w
繰り返しから次の一致する文字を除外することで、欲張りでない一致をエミュレートできます。[^*]+?\w*:
と同等[^*[:alnum:]_:]+[[:alnum:]_]*:
です。
指定された正規表現は、複数のBREとして表すことができます。
grep -e '^[[:space:]]*\*[[:space:]]\{1,\}\[ \][^*[:alnum:]_+]\{1,\}[[:alnum:]_]*:[^*]\{1,\}[[:digit:]]$' \
-e '[^*]\{1,\}\.com\.au$' file1
またはERE:
grep -E '^[[:space:]]*\*[[:space:]]*\[ \][^*[:alnum:]_:]+[[:alnum:]_]*:[^*]+[[:digit:]]$|[^*]+\.com\.au$' \
file1
のGNU実装では、移植性のない拡張機能としてgrep(1)
、短い文字クラス(\s
および\w
)と貪欲でない繰り返し( )の両方が許可されていることに注意してください。+?