Linux

grep 命令有問題嗎?我得到的字元與我的正則表達式不匹配

  • April 21, 2021

我執行了這個命令:

grep -i 'bro*' shows.csv

並將其作為輸出

1845307,2 Broke Girls,2011,138,6.7,89093
1702042,An Idiot Abroad,2010,21,8.3,29759
903747,Breaking Bad,2008,62,9.5,1402577
2249364,Broadchurch,2013,24,8.4,89378
1733785,Bron/Broen,2011,38,8.6,56357
2467372,Brooklyn Nine-Nine,2013,145,8.4,209571
7569592,Chilling Adventures of Sabrina,2018,36,7.6,69041
7221388,Cobra Kai,2018,31,8.7,72993
1355642,Fullmetal Alchemist: Brotherhood,2009,69,9.1,111111
118360,Johnny Bravo,1997,67,7.2,32185
455275,Prison Break,2005,91,8.3,465246
115341,Sabrina the Teenage Witch,1996,163,6.6,33458
1312171,The Umbrella Academy,2019,20,8,140800
3339966,Unbreakable Kimmy Schmidt,2015,51,7.6,61891

bro壞在哪裡?事實上,o甚至沒有出現在《絕命毒師》中。我又試了一次,得到了同樣的結果。它不考慮最後一個字元。我寫它的方式有什麼問題嗎?

您可以從https://cdn.cs50.net/2021/x/seminars/linux/shows.csv下載文件 shows.csv

在您的程式碼o*中表示“零次或多次出現o”。您似乎將正則表達式與 glob 語法(其中的o*意思是“一個o和零個或多個任意字元”)混淆了。

Breaking Bad之後正好有零個o字元Br,因此它匹配bro*(不區分大小寫)。

grep -i bro shows.csv會做你想做的(我認為)。

這裡的 o* 意味著“零或更多”。如果您想要帶有星號的所需輸出,您可以在 o 之後添加一個隨機字母,如下所示:

$ grep -i “broa*” 顯示.csv

1845307,2 Broke Girls,2011,138,6.7,89093 1702042,國外白痴,2010,21,8.3,29759 2249364,Broadchurch,2013,24,8.4,89378 1733785,Bron/Broen,20151,38,8.6,6 2467372,布魯克林九九,2013,145,8.4,209571 1355642,鋼之煉金術師:兄弟會,2009,69,9.1,111111

否則,grep -i "bro" shows.csv將工作。

HTH。

引用自:https://unix.stackexchange.com/questions/645008