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) 語法,例如{},()?。新增選項-E以使用 ERE 或進行轉義{}()使用反斜線並取代?如下: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

相關內容