您好,登錄后才能下訂單哦!
今天我們來學習下 shell 中的 grep 和正則表達式。作為基礎入門學習,也只是學習一些簡單的語法。
首先我們來看看 grep 查找命令。我們先來看看 man grep
我們看到 grep 的用法有很多,我們就來看看最常用的一些操作。
我們可以看到 grep "a" test.txt 和 cat test.txt | grep "a" 的效果是一樣的,都是查找 a 這個字符。那么我們在前面加上 -v 呢,它表示的是除了帶有 a 字符剩余的別的內容。
我們看到 -c 的意思是打印出所查找字符的行數, -v -c 就代表的是除所查找的字符以外的所有行數。
我們看到 -n 便是加上它所在的行號,同樣的也適用于 cat 命令。
我們看到 -A 2 是顯示所查找的字符的后兩行(after);-B 2 是顯示所查找的字符前兩行(before);-A 2 -B 2 和 -C 2 的效果是一樣的,都是顯示所查找字符的前后兩行的數據。
我們看到在 -r 選項是遞歸查找,如果我們在查找的子目錄中也有相應的字符串,那么我們此時加上 -r ,便會全部查找到。
下來我們來學習下正則表達式,那么為什么要學習正則表達式呢?正則表達式: a> 能模糊、快速匹配數據串;b> 為學習 grep,awk,sed 等文本過濾命令做鋪墊;c > 編寫高級 bash 腳本的需要。那么正則表達式有哪些元字符呢?[ ] \ ^ $ . | ? * + ( )
我們接下來來看看這些基本元字符的含義,如下
下來我們逐一來看看。
1、^
我們看到 ls | grep '^[0-9]' 查找的是以 0-9 開頭的文件,下面是 0-3 開頭的文件。在里面加上 ^ 表示非 0-3 開頭的所有文件。
2、$
我們看到我們在查找以 e 結尾的字符,然后再以數字 0-9 開頭的,它只能嚴格匹配到 3e 和 4e;而 56e 只能以不是 ^ 開頭的這樣方式來進行匹配。
3、* 和 ?
我們看到在以數字開頭,?* 后面接任意字符的字符串全被打印出來了。
4、 .
我們看到在以 5 開頭,e 結尾的字符串 56e 被成功匹配出來;
5、pattern\{n\}
我們看到兩次的區別是什么呢?前一次的是只要符合條件就都匹配出來,加上 ^ 則表示只以兩個數字開頭的字符串被匹配出來。
6、pattern\{n, \}
我們看到效果是最少出現 2 次,在后面我們寫進去的 77777777 也被匹配出來了。
7、pattern\{n,m\}
我們看到這次是在數字開頭的 2 和 4 之間的字符串。經過學習了這么多正則表達式的用法,發現它還是很靈活的,后面我們會繼續對正則表達式的學習。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。