我無法使用正規表示式讓 grep 正常運作

我無法使用正規表示式讓 grep 正常運作
ssh1% cat temp

sarah

saab

marrrrrrrrra

marrrrrrrtha

ssh1% grep ar*a temp

grep: No match.

這不應該是輸出嗎?

sarah saab marrrrrra

我嘗試在 Windows 10 上使用 putty 和 nxclient。

答案1

您正在使用csh,它會看到*並嘗試將其擴展為殼球並失敗了。也就是說,csh這裡說的是“不匹配”,而不是grep。不像伯恩家族貝殼csh不會將不可擴展的全域模式傳遞給命令,因此您必須引用它才能將csh其釋放到grep.

我建議在這裡使用單引號,因為您不想這樣做將變數放入字串中:

% grep 'ar*a' temp
sarah
saab
marrrrrrrrra

雙引號在這種情況下也適用,因為您的模式不包含$,但我還是建議在這裡使用單引號。仔細考慮在允許半互換使用的語言中使用哪些引號是一個值得培養的習慣,例如 shell、Perl 等。

順便說一句,您也應該在 Bourne 系列 shell 下引用 RE 模式。正如邁克·瓦格納(Mike Wagner)在上面的評論中暗示的那樣,因為正則表達式和全局模式使用許多相同的特殊字符,有時你可以寫一個 RE 模式發生也匹配某些文件,因此意外地被 shell 擴展。

相關內容