Linux grep基本用法與正則表示式
本文只是對於常用的grep配合正則表示式基本用法進行簡單小結,如果想仔細的學習正則表示式,請訪問鳥哥Linux私房菜,臺灣同胞的網站是繁體中文的,需要點兒耐心。
1、grep命令
功能:輸入檔案的每一行中查詢字串。
基本用法:
grep [-acinv] [--color=auto] [-A n] [-B n] '搜尋字串' 檔名
引數說明:
-a:將二進位制文件以文字方式處理
-c:顯示匹配次數
-i:忽略大小寫差異
-n:在行首顯示行號
-A:After的意思,顯示匹配字串後n行的資料
-B:before的意思,顯示匹配字串前n行的資料
-v:顯示沒有匹配行-A:After 的意思,顯示匹配部分之後n行-B:before的意思,顯示匹配部分之前n行
--color:以特定顏色高亮顯示匹配關鍵字
–color選項是個非常好的選項,可以讓你清楚的明白匹配了那些字元。最好在自己的.bashrc或者.bash_profile檔案中加入:
alias grep=grep --color=auto
每次grep搜尋之後,自動高亮匹配效果了。‘搜尋字串’是正則表示式,注意為了避免shell的元字元對正則表示式的影響,請用單引號(’’)括起來,千萬不要用雙引號括起來(””)或者不括起來。
2、grep 與正則表示式
正則表示式分為基本正則表示式和擴充套件正則表示式。下面分別簡單總結一下。
元資料 | 意義和範例 |
---|---|
^word |
搜尋以word開頭的行。 例如:搜尋以#開頭的指令碼註釋行 grep –n ‘^#’ regular.txt |
word$ |
搜尋以word結束的行 |
. |
匹配任意一個字元。 例如:grep –n ‘e.e’ regular.txt 匹配e和e之間有任意一個字元,可以匹配eee,eae,eve,但是不匹配ee。 |
\ |
轉義字元。 例如:搜尋’,’是一個特殊字元,在正則表示式中有特殊含義。必須要先轉義。grep –n ‘\,” regular.txt |
* |
前面的字元重複0到多次。 例如匹配gle,gogle,google,gooogle等等 grep –n ‘go*gle’ regular.txt |
[list] |
匹配一系列字元中的一個。 例如:匹配gl,gf。grep –n ‘g[lf]’ regular.txt |
[n1-n2] |
匹配一個字元範圍中的一個字元。 例如:匹配數字字元 grep –n ‘[0-9]’ regular.txt |
[^list] |
匹配字符集以外的字元 例如:grep –n ‘[^o]‘ regular.txt 匹配非o字元 |
\<word |
單詞是的開頭。 例如:匹配以g開頭的單詞 grep –n ‘\<g’ regular.txt |
word\> |
前面的字元重複n1,n2次 例如:匹配google,gooogle。grep –n ‘go\{2,3\}gle’ regular.txt |
\<word |
匹配單詞結尾 例如:匹配以tion結尾的單詞 grep –n ‘tion\>’ regular.txt |
word\{n1\} |
前面的字元重複n1 例如:匹配google。 grep –n ‘go\{2\}gle’ regular.txt |
word\{n1,\} |
前面的字元至少重複n1 例如:匹配google,gooogle。 grep –n ‘go\{2\}gle’ regular.txt |
word\{n1,n2\} |
前面的字元重複n1,n2次 例如:匹配google,gooogle。 grep –n ‘go\{2,3\}gle’ regular.txt |
擴充套件正則表示式
? #匹配0個或1個在其之前的那個普通字元。
例如,匹配gd,god grep –nE ‘go?d’ regular.txt
+ #匹配1個或多個在其之前的那個普通字元,重複前面字元1到多次。
例如:匹配god,good,goood等等字串。
grep –nE go+d’ regular.txt
() #表示一個字元集合或用在expr中,匹配整個括號內的字串,
原來都是匹配單個字元。 例如:搜尋good或者glad
grep –nE ‘g(oo|la)’ regular.txt
| #表示“或”,匹配一組可選的字元,或(or)的方式匹配多個字串。
例如:grep –nE ‘god|good’ regular.txt 匹配god或者good。
常用的集合表示方法有:
純數字:[[:digit:]]或[0-9]
小寫字母:[[:lower:]]或[a-z]
大寫字母:[[:upper:]]或[A-Z]
大小寫字母:[[:alpha:]]或[a-zA-Z]
數字加字母:[[:alnum:]]或[0-9a-zA-Z]
空白字元:[[:space:]]
標點符號:[[:punct:]]
3、關於匹配的例項
grep -c "48" test.txt #統計所有以“48”字元的行有多少
grep -i "May" test.txt #不區分大小寫查詢“May”所有的行)
grep -n "48" test.txt #顯示行號;顯示匹配字元“48”的行及行號,相同於 nl test.txt |grep 48)
grep -v "48" test.txt #顯示輸出沒有字元“48”所有的行)
grep "471" test.txt #顯示輸出字元“471”所在的行)
grep "48;" test.txt #顯示輸出以字元“48”開頭,並在字元“48”後是一個tab鍵所在的行
grep "48[34]" test.txt #顯示輸出以字元“48”開頭,第三個字元是“3”或是“4”的所有的行)
grep "^[^48]" test.txt #顯示輸出行首不是字元“48”的行)
grep "[Mm]ay" test.txt #設定大小寫查詢:顯示輸出第一個字元以“M”或“m”開頭,以字元“ay”結束的行)
grep "K…D" test.txt #顯示輸出第一個字元是“K”,第二、三、四是任意字元,第五個字元是“D”所在的行)
grep "[A-Z][9]D" test.txt #顯示輸出第一個字元的範圍是“A-D”,第二個字元是“9”,第三個字元的是“D”的所有的行
grep "[35]..1998" test.txt #顯示第一個字元是3或5,第二三個字元是任意,以1998結尾的所有行
grep "4/{2,/}" test.txt #模式出現機率查詢:顯示輸出字元“4”至少重複出現兩次的所有行
grep "9/{3,/}" test.txt #模式出現機率查詢:顯示輸出字元“9”至少重複出現三次的所有行
grep "9/{2,3/}" test.txt #模式出現機率查詢:顯示輸出字元“9”重複出現的次數在一定範圍內,重複出現2次或3次所有行
grep -n "^$" test.txt #顯示輸出空行的行號
ls -l |grep "^d" #如果要查詢目錄列表中的目錄 同:ls -d *
ls -l |grep "^d[d]" #在一個目錄中查詢不包含目錄的所有檔案
ls -l |grpe "^d…..x..x" #查詢其他使用者和使用者組成員有可執行許可權的目錄集合
4、grep練習題
(1).顯示/proc/meminfo檔案中以大寫或小寫s開頭的行;
# grep -i '^[Ss]' /proc/meminfo
(2).顯示/etc/passwd檔案中其預設shell為非/sbin/nologin的使用者;
# grep -v '/sbin/nologin$' /etc/passwd | cut -d: -f1
(3).顯示/etc/passwd檔案中其預設shell為/bin/bash的使用者
進一步:僅顯示上述結果中其ID號最大的使用者
# grep '/bin/bash$' /etc/passwd | cut -d: -f1 | sort -n -r | head -1
(4).找出/etc/passwd檔案中的一位數或兩位數;
# grep '\<[[:digit:]]\{1,2\}\>' /etc/passwd
(5).顯示/boot/grub/grub.conf中至少一個空白字元開頭的行
# grep '^[[:space:]]\+.*' /boot/grub/grub.conf
(6).顯示/etc/rc.d/rc.sysinit檔案中,以#開頭,後面跟至少一個空白字元,而後又有至少一個非空白字元的行;
# grep '^#[[:space:]]\+[^[:space:]]\+' /etc/rc.d/rc.sysinit
(7).找出netstat -tan命令執行結果中包含’LISTEN’的行;
# netstat -tan | grep 'LISTEN[[:space:]]*$
(8).新增使用者bash,testbash,basher,nologin(SHELL為/sbin/nologin),而找出當前系統上其使用者名稱和預設SHELL相同的使用者;
# grep '\(\<[[:alnum:]]\+\>\).*\1$' /etc/passwd
(9).擴充套件題:新建一個文字檔案,假設有如下內容:
He like his lover.
He love his lover.
He like his liker.
He love his liker.
找出其中最後一個單詞是由此前某單詞加r構成的行;
# grep '\(\<[[:alpha:]]\+\>\).*\1r' grep.txt
(10).顯示當前系統上root、centos或user1使用者的預設shell及使用者名稱;
# grep -E '^(root|centos|user1\>)' /etc/passwd
(11).找出/etc/rc.d/init.d/functions檔案中某單詞後面跟一對小括號’()”的行;
# grep -o '\<[[:alpha:]]\+\>()' /etc/rc.d/init.d/functions
(12).使用echo輸出一個路徑,而使用egrep取出其基名;
# echo /etc/rc.d/ | grep -o '[^/]\+/\?$' | grep -o '[^/]\+'
相關推薦
Linux grep基本用法與正則表示式
本文只是對於常用的grep配合正則表示式基本用法進行簡單小結,如果想仔細的學習正則表示式,請訪問鳥哥Linux私房菜,臺灣同胞的網站是繁體中文的,需要點兒耐心。 1、grep命令 功能:輸入檔案的每一行中查詢字串。 基本用法: grep [-ac
Linux 萬用字元 與 正則表示式 的區別與詳解
背景:在linux使用過程中,經常需要查詢檔案,對命令中的萬用字元 pattern 和正則表示式的區分不是很清楚。有必要好好研究一下。 1 掃盲 1.1 萬用字元和正則表示式 當在使用命令列時,有很多時間都用來查詢你所需要的檔案,如 ls find 等。 Sh
強大的grep用法詳解:grep與正則表示式
首先要記住的是: 正則表示式與萬用字元不一樣,它們表示的含義並不相同!正則表示式只是一種表示法,只要工具支援這種表示法, 那麼該工具就可以處理正則表示式的字串。vim、grep、awk 、sed 都支援正則表示式,也正是因為由於它們支援正則,才顯得它們強大;在以前上班的公司裡,由於公司是基於web的服務型網站
文字搜尋必學命令-grep egrep fgrep用法以及正則表示式
一、grep、egrep、fgrep命令 本文中主要介紹了linux系統下grep egrep fgrep命令和正則表示式的基本引數和使用格式、方法。(註釋:文中fg代表例子,) 1.1、基本定義: grep(global search regu
Grep(egrep)與正則表示式
如下,g??d 可以用 'g..d' 表示。 good ,gxxd ,gabd .....都符合。 [email protected]:~/tmp$ grep -n 'g..d' regular_express.txt 1:"Open Source" is a good mechanism to d
1.2 Linux基本命令和正則表示式 3.13
一、基本命令 1、find:(1) -name 根據名字查詢 -inname 不區分大小寫查詢 (2) -sixe 根據大小查詢檔案 +n 大於;-n 小於;n 等於(n為檔案大小)
Linux筆記(49)——正則表示式與字元命令
正則表示式 正則表示式用於字串的模式分割,匹配,查詢以及替換操作 比如有一篇很長很長的文章,我們如何找到自己想要的資訊?可以使用正則的匹配功能 正則表示式與萬用字元 萬用字元有: 1. * :匹配任意字元 2. ?:匹配任意一個字元 3. []
JavaScript日期格式化與正則表示式RegExp.$的用法
今天有空就開寫一個Calendar日曆,在網上看到一個牛人寫的JavaScript日期格式化的程式碼,看了一會有點暈。程式碼奉上: /** * @param d the delimiter * @param p the pattern of your date
Linux/Unix工具與正則表示式的POSIX規範
對正則表示式有基本瞭解的讀者,一定不會陌生『\d』、『[a-z]+』之類的表示式,前者匹配一個數字字元,後者匹配一個以上的小寫英文字母。但是如果你用過vi、grep、awk、sed之類Linux/Unix下的工具或許會發現,這些工具雖然支援正則表示式,語法卻很不一樣,照通
Linux Shell的萬用字元與正則表示式
Overview wildcard是由shell處理的, 它只會出現在 command的argument 裡——既不用在 command_name裡, 也不用在 options 上。當在argument中碰到Wildcard時,shell會將其當作路徑或檔名去在磁碟上搜尋可能
Day15 - linux的特殊符號與正則表達式
find 括號 window type yellow 啟動 字符 clip 標準輸出 第1章 linux的特殊符號 1.1 通配符 * {} 1.1.1 含義 方便查找文件 通配符是用來找文件名字的。 1.1.2 * 通過find 命令找以 .sh 結尾的文件
【前端】JavaScript與正則表示式
一、正則表示式(regular expression簡稱res) 1、定義 一個正則表示式就是由普通字元以及特殊字元(稱為元字元)組成的文字模式。該模式描述在查詢文字主體時待匹配的一個或多個字串。正則表示式作為一個模板,將某個字元模式與所搜尋的字串進行匹配。 2、作用 正則表示式
jmeter設定全域性變數與正則表示式提取器
介面測試中,很多介面都要帶上登入後的token才能正常傳送請求,這裡記錄一下登入獲取token設定為全域性變數供其他介面使用 登入後返回資訊資訊中會有一個token值,新增後置處理器中的正則表示式提取token,然後用後置處理器中的BeanShell PostProcessor設定token為全域性變數
[一天幾個linux命令] shell指令碼之正則表示式
shell指令碼之正則表示式 原文連結:Linux–shell指令碼之正則表示式 概念及特點 概念 正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定的字元、及這些特定字元的組合,組成一個"規則字串",這個"規則字串"用來表達對字串的一種過濾邏輯。規定一些特殊語
Python學習筆記模式匹配與正則表示式之使用和不使用正則表示式
隨筆記錄方便自己和同路人查閱。 #------------------------------------------------我是可恥的分割線------------------------------------------- 假設你希望在字串中查詢電話號碼。你知道模式:3個數字,一
Day004_Linux基礎命令之特殊符號與正則表示式萬用字元
特殊符號: . 點 cd . 表示當前目錄 ' '' 單引號,所見即所得 原封不動輸出 " ""雙引號,裡面的特殊符號會被解析執行 `` ====$( ) 先執行() 裡的命令,把結果留下 > 重定向符號 先清空檔案內容, 再追加檔案最後一行 &
Javascript 與正則表示式
Javascript 與正則表示式 一、正則表示式(regular expression簡稱res) 1、定義: 一個正則表示式就是由普通字元以及特殊字元(稱為元字元)組成的文字模式。該模式描述在查詢文字主體時待匹配的一個或多個字串。正則表示式作為一個模板,將某個字
Groovy入門-字串處理與正則表示式
字串處理-1 println ‘lxt008 said "Groovy"' println "lxt008 said 'Grails'" def str1 = 'Groovy&Grails&lxt008' println str1[4]
Python爬蟲與正則表示式
Python爬蟲與正則表示式 一.Python中萬用字元的使用 1.表示方式 表示 意義 * 匹配0到任意字元 ? 匹配單個字元
Scala的檔案讀寫操作與正則表示式
在本篇部落格中你將會學習並瞭解常用的檔案處理任務,例如讀取檔案的一行文字,本部落格的要點包含: Source.fromFile(...).getLines.toArray 輸出檔案所有行 Source.fromFile(...).mkString 以字串形式輸出檔案內容 將字串轉換為數字,可以使用toI