unix的grep命令
生活随笔
收集整理的這篇文章主要介紹了
unix的grep命令
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、grep、egrep、fgrep命令
? 本文中主要介紹了linux系統下grep egrep fgrep命令和正則表達式的基本參數和使用格式、方法。(注釋:文中fg代表例子,)
1.1、基本定義:
? ? ? ? grep(global search regular RE ) and print out the line,全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,它只能使用基本的正則表達式來搜索文本,并把匹配的行打印出來。
? ? grep是很常見也很常用的命令,它的主要功能是進行字符串數據的比較,然后符合用戶需求的字符串打印出來,但是主意,grep在數據中查找一個字符串時,是以“整行”為單位進行數據篩選的。
? ? egrep命令等同于grep -E,利用此命令可以使用擴展的正則表達式對文本進行搜索,并把符合用戶需求的字符串打印出來。
? ? fgrep命令等同于grep -F,它利用固定的字符串來對文本進行搜索,但不支持正則表達式的引用,所以此命令的執行速度也最快。
1.2、命令基本用法
? ? ?grep [option] '搜索字符串' filename
? ? ? grep常用選項:
? ? ? ? ? -a :在二進制文件中,以文本文件的方式搜索數據
? ? ? ? ? -c :計算找到'搜索字符串'的次數
? ? ? ? ? -i :忽略大小寫
? ? ? ? ? -v :反向查找,即顯示沒有'搜索字符串'內容的那行
? ? ? ? ? -o :只顯示被模式匹配的字符串
? ? ? ? ? -n :輸出行號
? ? ? ? ? --colour(color):顏色顯示
?
? ? ? ? ? -A:顯示匹配到字符那行的后面n行
? ? ? ? ? -B:顯示匹配到字符那行的前面n行
? ? ? ? ? -C:顯示匹配到字符那行的前后n行
?
二、正則表達式
2.1、基本定義:
? ? ?正則表達使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些符合某個模式的文本。簡而言之,正則表達式就是處理字符串的方法,以行為單位進行字符串的處理,通過一些特殊符號的輔助,可以讓用戶輕松搜索/替換某特定的字符串。
? ? ?正則表達式分為兩類:基本的正則表達式和擴展的正則表達式。
2.2、正則表達式詳細介紹
? 2.2.1、基本的正則表達式:
? ? ? (1)元字符:
? ? ? ? ? ?. :匹配任意單個字符
? ? ? ? ? ? ?fg:查找包含student且student后面帶一個字符的行
? ? ? ? ? ? ?grep ‘student.’ /etc/passwd (模式可以用單引號和雙引號,如果模式中要做變量替換時則必須用雙引) ? ??
? ? ? ? ? ?[] :匹配指定范圍內的任意單個字符,[abc],[a-z],[0-9],[a-zA-Z]
? ? ? ? ? ? ? ?fg:查找帶有數字的行
? ? ? ? ? ? ? ?grep ‘[0-9]’ /etc/passwd
? ? ? ? ? ?[^] :匹配指定范圍外的任意單個字符
? ? ? ? ? ? ? ? fg:查找沒有小寫字母的行。
? ? ? ? ? ? ? ? grep ‘[^a-z]’ /etc/inittab
? ? ? ? ? ?[:space:]:表示空白字符
? ? ? ? ? ?[:punct:]:表示所有標點符號的集合
? ? ? ? ? ?[:lower:]:表示所有的小寫字母
? ? ? ? ? ?[:upper:]:表示所有的大寫字母
? ? ? ? ? ?[:alpha:]:表示大小寫字母
? ? ? ? ? ?[:digit:]:表示數子
? ? ? ? ? ?[:alnum:]:表示數字和大小寫字母-----使用格式[[:alnum:]]等
? ? ? (2)次數匹配:
? ? ? ? ? ?* ?:匹配其前面的字符任意次
? ? ? ? ? ? ? ?fg:查找root出現0次或0次以上的行
? ? ? ? ? ? ?grep ‘root*’ /etc/passwd
? ? ? ? ? ? .* :任意字符?
? ? ? ? ? ? ? ? fg:查找包含root的行
? ? ? ? ? ? grep 'root.*' /etc/passwd
? ? ? ? ? ? \?:匹配其前面的字符1次或0次
? ? ? ? ? ? \{m,n\} :匹配其前字符最少m,最多n次)
? ? ? ? (3) 字符錨定:
? ? ? ? ? ? ^:錨定行首,此字符后面的任意內容必須出現在行首
? ? ? ? ? ? ? ? fg:查找行首以#開頭的行
? ? ? ? ? ? ? ? grep '^#' /etc/inittab
? ? ? ? ? ? $:錨定行尾,此字符前面的任意內容必須出現在行尾
? ? ? ? ? ? ? ? fg:查找行首以root結尾的行
? ? ? ? ? ? ? ? grep 'root$' /etc/inittab ?
? ? ? ? ? ? ^$:錨定空白行,可以統計空白行
? ? ? ? ? ? \<或者\b:錨定詞首,其后面的任意字符必須做為單詞首部出現
? ? ? ? ? ? ? ?fg:查找root且root前面不包含任何字符的行
? ? ? ? ? ? ? ? ?grep '\
? ? ? ? ? ? \>或者\b:錨定詞尾,其前面的任意字符必須做為單詞尾部出現 ? ? ? ? ? ? ? ? ? ? ? ?fg:\ 查找root單詞 ?grep "\" =grep "\broot\b"
?2.2.2、擴展的正則表達式:
? ? ? ? ?擴展的正則表達只是在基本的正則表達上作出了小小的一點修改,其修改如下:
?在擴展的正則表達中把\( \) 寫成()、\{ \} 寫成{ },另外加入了+:次數匹配,匹配其前面的字符至少出現一次,無上限、|: 或者(二取一),其余的都一樣, 基本正則表達式,使用( ) { } . ? |都需要轉義,在擴展正則表達中不需要加\,其詳細信息如下:
? ? ? ? ?(1) 字符匹配的命令和用法與基本正則表達式的用法相同,這里不再重復闡述。
? ? ? ? ?(2) 次數匹配:
? ? ? ? ? ? ?* :匹配其前面字符的任意次
? ? ? ? ? ? ??:匹配其前面字符的0此或著1此
? ? ? ? ? ? ?+ :匹配其前面字符至少1此
? ? ? ? ? ? ? ? ? fg:至少一個空白符: '[[:space:]]+'
? ? ? ? ? ? ?{m,n} :匹配其前面字符m到n次
? ? ? ? ? (3) 字符錨定的用法和基本正則表達式的用法相同,在此不再闡述。
? ? ? ? ?(4)特殊字符:
? ? ? ? ? ? ? ?| : 代表或者的意思。
? ? ? ? ? ? ? ? ? ? fg:grep -E 'c|cat' file:表示在文件file內查找包含c或者cat
? ? ? ? ? ? ? ? \.:\表示轉義字符,此表示符號.
三、grep命令利用小實例
(1)顯示/etc/inittab 中以#開頭,且后面跟一個或者多個空白符,而后又跟了任意非空白符的行
grep '#[[:space:]]*[^[:space:]]' /etc/inittab
(2) 輸出不是數字開關的行grep '^[^0-9]'
/etc/passwd
(3)輸出行首是1或2
grep '^\(1\|2\)' /etc/inittab
或
grep -E '^(1|2)' /etc/inittab
?
(4)查找前面是rc中間接任意字符而后跟/rc
?
grep '.*\(rc\).*\/\1.*' /etc/inittab
?
(5)取出當前電腦上的IP
?
ifconfig |grep -A 1 "^eth0" |grep "\<[0-9.]\{1,\} |cut -d: -f2
?
(6)查找當前系統上名字為student(必須出現在行首)的用戶賬戶的相關信息,文件為/etc/passwd
?
grep "^student" /etc/passwd
總結
以上是生活随笔為你收集整理的unix的grep命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络经济学——第二章 网络外部性
- 下一篇: 【芯选择】CC1101芯片的模块实例