介紹
Linux grep命令用作過濾輸入的方法。
GREP代表全局正則表達式打印機,因此為了有效地使用它,您應該對正則表達式有所了解。
在本文中,我將向您展示一些將幫助您理解grep命令的示例。
09年01月
如何使用GREP在文件中搜索字符串
想像一下,你有一個名為書籍的文本文件,其中包含以下兒童書名:
- 羅賓漢
- 小紅帽
- 彼得潘
- 金發姑娘和三隻熊
- 白雪公主和七個小矮人
- Pinnochio
- 帽子裡的貓
- 三隻小豬
- 格魯法洛
- 查理和巧克力工廠
要在標題中查找所有帶有“The”字樣的書籍,請使用以下語法:
grep這些書
以下結果將被返回:
- 金發姑娘和三隻熊
- 白雪公主和七個小矮人
- 帽子裡的貓
- 三隻小豬
- 格魯法洛
- 查理和巧克力工廠
在每種情況下,單詞“The”都將突出顯示。
請注意,搜索區分大小寫,所以如果其中一個標題具有“the”而不是“The”,那麼它將不會被返回。
要忽略情況,您可以添加以下開關:
grep the books --ignore-case
您也可以使用-i開關,如下所示:
grep - 我的書
09年02月
使用通配符搜索文件中的字符串
grep命令非常強大。 您可以使用多種模式匹配技術來過濾結果。
在這個例子中,我將向您展示如何使用通配符在文件中搜索字符串。
想像一下,你有一個名為蘇格蘭地名的文件:
阿伯丁
阿伯里斯特威斯
亞伯勞爾
因弗魯
因弗內斯
紐堡
新鹿
新蓋洛韋
格拉斯哥
愛丁堡
如果您想在名稱中找到所有包含inver的地方,請使用以下語法:
grep inver *地方
星號(*)通配符代表0或許多。 因此,如果你有一個名叫inver的地方或一個叫做inverness的地方,那麼兩個人都會被退回。
另一個可以使用的通配符是句點(。)。 你可以用它來匹配一個字母。
grep inver.r的地方
上面的命令會找到稱為inverurie和inverary的地方,但不會找到謹慎的地方,因為在兩個r之間只能有一個通配符,如單個週期所示。
週期通配符很有用,但是如果您有一個作為您正在搜索的文本的一部分,則可能會導致問題。
例如看看這個域名列表
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
要查找所有about.com,只需使用以下語法進行搜索即可:
grep *關於*域名
如果列表中包含以下名稱,則上述命令將失效:
- everydaylinuxuser.com/about.html
因此,您可以嘗試以下語法:
grep * about.com域名
除非有以下名稱的域名,否則這將工作正常:
aboutycom.com
要真正搜索術語about.com,您需要按如下方式轉義點:
grep *關於\ .com域名
最後顯示的通配符是代表零個或一個字符的問號。
例如:
grep?ber地名
上述命令將返回阿貝丁,aberystwyth甚至berwick。
09年3月
搜索字符串的開始和結束使用grep
克拉(^)和美元($)符號允許您在行首和行尾搜索模式。
想像一下,你有一個名為足球的文件,其隊名如下:
- 布萊克浦
- 利物浦
- 曼徹斯特城
- 萊斯特市
- 曼聯
- 紐卡斯爾聯隊
- FC曼徹斯特聯隊
如果你想找到所有以曼徹斯特隊開始的隊伍,你可以使用下面的語法:
grep ^曼徹斯特隊
上述命令將返回曼城和曼聯,但不是FC曼徹斯特聯隊。
或者,您可以使用以下語法查找以United結尾的所有團隊:
grep United $隊
上述命令將返回曼聯和紐卡斯爾聯隊,但不會返回曼徹斯特聯隊。
09年9月4日
使用grep計數匹配數量
如果你不想使用grep返回匹配模式的實際行,但你只想知道有多少可以使用下面的語法:
grep -c模式輸入文件
如果模式匹配兩次,則返回數字2。
09年05月05日
查找所有使用grep不匹配的術語
想像一下,你有一個地名列表,列出的國家如下:
- 阿布迪恩蘇格蘭
- 格拉斯哥蘇格蘭
- 利物浦英格蘭
- 科溫海灣
- 倫敦,英國
您可能已經註意到,科林灣沒有任何國家與之相關聯。
要搜索具有國家/地區的所有地點,您可以使用以下語法:
grep land $地方
結果返回將是所有地方除了colwyn海灣。
這顯然只適用於以土地為終點的地方(幾乎不科學)。
您可以使用以下語法反轉選擇:
grep -v地點$地方
這會找到所有沒有土地的地方。
09年06月
如何使用grep在文件中查找空行
假設您有一個輸入文件,第三方應用程序使用該輸入文件,該文件在發現空行時會停止讀取文件,如下所示:
- 阿布迪恩蘇格蘭
- 因弗內斯蘇格蘭
- 利物浦英格蘭
- 科爾韋灣威爾士
當應用程序在利物浦後到達線路時,它將停止閱讀,意味著科爾溫灣完全錯過了。
您可以使用grep通過以下語法搜索空行:
grep ^ $地方
不幸的是,這不是特別有用,因為它只是返回空白行。
您當然可以通過檢查空白行數來檢查文件是否有效,如下所示:
grep -c ^ $地方
然而,知道有空行的行號會更有用,因此可以替換它們。 你可以用下面的命令來做到這一點:
grep -n ^ $地方
09年7月
如何使用grep搜索大寫或小寫字符的字符串
使用grep您可以使用以下語法確定文件中的哪些行具有大寫字符:
grep'[AZ]'文件名
用方括號[]可以確定字符的範圍。 在上面的例子中,它匹配A和Z之間的任何字符。
因此,要匹配小寫字符,可以使用以下語法:
grep'[az]'文件名
如果您只想匹配字母而不是數字或其他符號,則可以使用以下語法:
grep'[a-zA-Z]'文件名
你可以使用如下的數字來做同樣的事情:
grep'[0-9]'文件名
09年08月08日
尋找使用grep重複模式
您可以使用大括號{}來搜索重複模式。
想像一下你有一個電話號碼如下的文件:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
您知道該號碼的第一部分需要三位數字,並且您希望找到與該模式不匹配的行。
從前面的例子你知道[0-9]返回文件中的所有數字。
在這種情況下,我們需要以三個數字開頭的連字符後跟一個連字符( - )。 你可以用下面的語法來做到這一點:
grep“^ [0-9] [0-9] [0-9] - ”數字
正如我們從前面的例子中知道的那樣,克拉(^)意味著該行必須以下面的模式開始。
[0-9]將搜索0到9之間的任何數字。因為它包含三次,所以它匹配3個數字。 最後有一個連字符來表示連字符必須成功的三個數字。
通過使用大括號可以使搜索變小,如下所示:
grep“^ [0-9] \ {3 \} - ”數字
斜杠轉義{括號,以便它作為正則表達式的一部分工作,但實質上這是說[0-9] {3},它表示0到9之間的任何數字三次。
大括號也可以使用如下:
{5,10}
{5,}
{5,10}表示被搜索的角色必須重複至少5次,但不超過10次,而{5}則表示角色必須重複至少5次,但可以超過此次數。
09年9月9日
使用其他命令的輸出使用grep
到目前為止,我們已經看到了單個文件內的模式匹配,但grep可以使用其他命令的輸出作為模式匹配的輸入。
一個很好的例子是使用列出活動進程的ps命令。
例如運行以下命令:
ps -ef
系統上的所有正在運行的進程都會顯示出來。
您可以使用grep來搜索特定的正在運行的進程,如下所示:
ps -ef | grep firefox