grep: 正規表現の問題

grep: 正規表現の問題

なぜこれが機能しないのか誰か説明できますか?

grep -ne '[A-Za-z]{1,30}\ [A-Z][a-z]{1,30}\W[A-Za-z]{1,30}\ [0-9]{1,30}\W[0-9]{5}\ [A-Za-z]{1,30}(\ [A-Za-z]{1,30})?' emails

答え1

まず、、、などの拡張正規表現 (ERE) 構文を使用しています{}。EREを使用するオプションを追加する()か、バックスラッシュを使用してと をエスケープし、次のように置き換えます。?-E{}()?grep -ne '[A-Za-z]\{1,30\} [A-Z][a-z]\{1,30\}\W[A-Za-z]\{1,30\} [0-9]\{1,30\}\W[0-9]\{5\} [A-Za-z]\{1,30\}\( [A-Za-z]\{1,30\}\)\{0,1\}' emails

次に、シングルクォート内のバックスラッシュでスペースをエスケープしています。ほとんどの実装ではgrepこれを単純なスペースとして処理しますが、POSIX 標準ではこれを未定義と見なします。バックスラッシュ ( '\' ) が前に付いた通常の文字の解釈は未定義です。

追加の問題があるかもしれませんが、ファイルの構文と何をしたいのかがわからないのでわかりません。grep

関連情報