
なぜこれが機能しないのか誰か説明できますか?
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