1. 程式人生 > >Linux Shell程式設計-grep

Linux Shell程式設計-grep

簡介

grep允許對文字檔案進行模式查詢。如果找到匹配模式,grep列印包含模式的所有行。grep支援基本的正則表示式,也支援其擴充套件子集。

格式

grep [OPTIONS] PATTERN [FILE...]

grep選項

常用的grep選項有:
-c 只輸出匹配行的計數。
-i 不區分大小寫(只適用於單字元)。
-h 查詢多檔案時不顯示檔名。
-l 查詢多檔案時只輸出包含匹配字元的檔名。
-n 顯示匹配行及行號。
-s 不顯示不存在或無匹配文字的錯誤資訊。
-v 顯示不包含匹配文字的所有行。
下面列出了一個文字,可以配合上面的選項做一些練習時使用:
48      Dec     3BC1997 LPSX    68.00   LVX2A   138
483     Sept    5AP1996 USP     65.00   LVX2C   189
47      Oct     3ZL1998 LPSX    43.00   KVM9D   512
219     dec     2CC1999 CAD     23.00   PLV2C   68
484     nov     7PL1996 CAD     49.00   PLV2C   234
483     may     5PA1998 USP     37.00   KVM9D   644
216     sept    3ZL1998 USP     86.00   KVM9E   234

grep和正則表示式

使用正則表示式使模式匹配加入一些規則,因此可以在抽取資訊中加入更多選擇。使用正則表示式時最好用單引號括起來,這樣可以防止grep中使用的專有模式與一些shell命令的特殊方式相混淆。
^ 只匹配行首
$ 只匹配行尾
* 只一個單字元後緊跟*,匹配0個或多個此單字元
[ ] 只匹配[ ]內字元。可以是一個單字元,也可以是字元序列。可以使用-表示[ ]內字元序列範圍,如用[1-5]代替[12345]
\ 只用來遮蔽一個元字元的特殊含義。因為有時在s h e l l中一些元字元有特殊含義。\可以使其失去應有意義
. 只匹配任意單字元
pattern\{n\} 只用來匹配前面pattern出現次數。n為次數
pattern\{n,\}  只含義同上,但次數最少為n
pattern\{n,m\} 只含義同上,但pattern出現次數在n與m之間
特殊應用: 1. 匹配空行:結合使用^和$可以查詢空行 2. 匹配特殊字元:查詢有特殊含義的字元,諸如$ . ' " * [ ] ^ | \ + ?,必須在特殊字元前加\。 舉例說明,匹配IPv4地址和查詢網絡卡介面名所在的行:
[email protected]:~$ ifconfig | grep '\([0-9]\{1,3\}\.\)\{3\}'
          inet addr:10.220.33.107  Bcast:10.220.33.255  Mask:255.255.255.0
          inet addr:127.0.0.1  Mask:255.0.0.0
[email protected]
:~$ ifconfig | grep 'eth0\|lo' eth0 Link encap:Ethernet HWaddr 00:0c:29:36:f2:73 lo Link encap:Local Loopback

類名

grep執行使用國際字元模式匹配或匹配模式的類名形式,如下表所示
類		等價的正則表示式
----		----------------
[[:upper:]] 	[A-Z]
[[:alnum:]]	[0-9a-zA-Z]
[[:lower:]]	[a-z]
[[:space:]]	空格或tab鍵
[[:digit:]]	[0-9]
[[:alpha:]]	[a-zA-Z]

egrep

grep僅包含基本的正則表示式,如果需要支援更多正則表示式,可以選用egrep,其等同於"grep -E"。

參考資料

1.  Linux與Unix Shell程式設計指南

相關推薦

Linux Shell程式設計-grep

簡介 grep允許對文字檔案進行模式查詢。如果找到匹配模式,grep列印包含模式的所有行。grep支援基本的正則表示式,也支援其擴充套件子集。 格式 grep [OPTIONS] PATTERN [F

kali Linux shell程式設計基礎到進階

前幾天在群裡聽他們說不會shell程式設計就不算會linux,嘿,就我這暴脾氣,學!幹!嘿嘿!行了,不扯犢子了,犢子要生氣了,最近學習了shell,感觸頗多,我也參考了其他大佬的經驗,看著視訊課,學了些許基礎,其實也就是那回事,認認真真踏踏實實的學,是能學到東西的,還有,要是自學的話,一定要能坐

Linux Shell程式設計 17 巢狀迴圈

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux Shell 程式設計基礎

什麼是shell? 在Linux核心與使用者之間的直譯器程式 — 通常指/bin/bash(預設直譯器) — 負責向核心翻譯及傳達使用者/程式指令 —相當於作業系統的“外殼”   互動式    ——命令列 — 人工干預、智慧化程度高;

linux Shellgrep+wc取值在shell中的結果與手動執行結果不一致的坑

vim restart.sh #!/bin/bash VDS=ps -ef |grep -w vds|grep -v grep|wc -l if [ $VDS -eq 0 ];thencd /usr/local/program;./linux-start.sh restartelseecho "It's

Linux Shell程式設計 awk命令

概述 awk是一種程式語言,用於在linux/unix下對文字和資料進行處理。資料可以來自標準輸入(stdin)、一個或多個檔案,或其它命令的輸出。它支援使用者自定義函式和動態正則表示式等先進功能,是linux/unix下的一個強大程式設計工具。它在命令列中使用,但更多是作為指令碼來使用。awk有很多內建的

Linux Shell程式設計 sed命令

概述 sed命令用來選取、替換、刪除、新増資料 sed 是一種幾乎可以應用在所有 UNIX 平臺(包括 Linux)上的輕量級流編輯器。sed 有許多很好的特性。首先,它相當小巧,通常要比你所喜愛的指令碼語言小多倍。其次,因為 sed 是一種流編輯器,所以,它可以對從如管道這樣的標準輸入中接收的

Linux Shell程式設計 test命令

概述 test 命令是Shell 指令碼中用來進行條件判斷的。 test命令示例 按照檔案型別進行判斷 測試選項 作 用 -b 檔案 判斷該檔案是否存在,並且是否為塊裝置檔案(是塊裝置檔案為真) -c 檔案 判斷

Linux Shell程式設計 條件判斷語法

if條件判斷語句 單分支 if 條件語句 語法格式: if [條件判斷式];then 程式 fi 或者 if [條件判斷式] then 程式 fi 在使用單分支 if 條件查詢時需要注意幾點: if 語句使用 fi 結尾,和一般語言使用大括號結尾不同。 [

Linux Shell程式設計 迴圈語法

for迴圈 for 迴圈是固定迴圈,也就是在迴圈時已經知道需要進行幾次迴圈。有時也把 for 迴圈稱為計數迴圈。語法: for 變數 in 值1 值2 值3… do 程式 done 在這種語法中,for 迴圈的次數取決於 in 後面值的個數(以空格分隔),有幾個值就迴圈幾次,並且每次迴圈

Linux Shell程式設計基礎入門

shell指令碼通常以#!/bin/bash 起始 指令碼的執行方式有兩種。 將指令碼名作為命令列引數: bash myScript.sh 授予指令碼執行許可權,將其變為可執行檔案: chmod 755 myScript.sh ./myScript.sh

Linux shell程式設計基礎

一、linux常用命令     1.修改機器名稱(實質上是機器的域名,相當於www.baidu.com):vim /etc/hostname      2.關閉機器:shutdown -h now 或者 reboot -h now來直接重啟     3.檢視ip地址:ifco

如何在 Linux Shell 程式設計中定義和使用函式

函式是一段可複用的程式碼。我們通常把重複的程式碼放進函式中並且在不同的地方去呼叫它。庫是函式的集合。我們可以在庫中定義經常使用的函式,這樣其它指令碼便可以不再重複程式碼而使用這些函式。 呼叫函式 在 Shell 中呼叫函式和呼叫其它命令是一模一樣的。例如,如果你

Linux shell程式設計常用語法

1 常用語法 1.1 shell程式設計空格注意事項 shell 程式設計空格注意事項https://blog.csdn.net/codeheng/article/details/51177344?fr

Linux Shell 程式設計 迴圈控制 條件控制 輸入引數等

1. 傳入指令碼引數 $# 是傳給指令碼的引數個數  $0 是指令碼本身的名字  $1是傳遞給該shell指令碼的第一個引數  $2是傳遞給該shell指令碼的第二個引數  [email protected] 是傳給指令碼的所有引數的列表 2. 建立一個新檔案

Linux Shell程式設計(17)——巢狀迴圈

巢狀迴圈就是在一個迴圈中還有一個迴圈,內部迴圈在外部迴圈體中.在外部迴圈的每次執行過程中都會觸發內部迴圈,直到內部迴圈執行結束.外部迴圈執行了多少次,內部迴圈就完成多少次.當然,不論是外部迴圈或內部迴圈

linux shell 程式設計基礎筆記

1.變數 命名規則,只能以數字,字母,下劃線開始 命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭。 中間不能有空格,可以使用下劃線(_)。 不能使用標點符號。 不能使用bash裡的關鍵字(可用help命令檢視保留關鍵字)  舉例說明 RUNOOB LD_LI

linux shell程式設計之利用環境變數IFS自定義分隔符

預設情況下,bash shell將空格符、製表符、換行符看作是欄位分隔符,如果遇到這些字元,bash shell就會認為字元後是一個新的欄位,這就帶來一種困擾:如果我們想處理包含空格、製表符、換行符的字元就會有麻煩了。bash提供了一種自定義分隔符的機制:環境變數IFS定義

linux shell程式設計

條件選擇 if -then  語句 if command then commands fi 另一種形式 if command; then commands fi 關於退出狀態碼,你只需要記住:正常退出(命令執行正常)的狀態碼是0, 非正常退出的狀態碼不是0(有不少)

LINUX SHELL程式設計從初學到精通 高清完整 .pdf版

shell是使用者與核心進行互動操作的一種介面,是linux最重要的軟體之一。目前最流行的shell稱為bash shell,bash shell指令碼程式設計以其簡潔、高效而著稱,多年來成為linux程式設計師和系統管理員解決實際問題的利器。 《linux