grep文本過濾
1.grep 默認是按照以行為基本單位進行匹配和顯示的。
2.grep默認匹配只要包含模式字符即可
grep -w 是按單詞匹配,和普通的匹配不一致
單詞的分隔符, 數字加字母加下划線都算做單詞的一部分
grep -f p.txt /etc/passwd
匹配顯示結果的行號
grep 並且關系和 或者關系
1.並且 grep root /etc/passwd | grep shutdown
2.或者 grep -e root -e shutdown /etc/passwd
正則表達式
1.字符匹配
. 表示一個任意字符 .放在[]里面就表示.本身這個字符
2.匹配次數
某一個字符出現的次數
* 表示*號前面的字符出現的次數是不確定的
3.位置錨定
行首 ^ 不能匹配中間某段字符串的開始
行尾 $ 不能匹配中間某一段字符串的結尾
單詞詞首 \<root root處於單詞的最左側
單詞詞尾 root\> root處於單詞的最右側
4.分組
1. echo wangwangwangggww | grep "\(wang\)\{3\}"
2.后向引用
正則表達式和通配符的區別
正則表達式匹配的是文件的內容或者標准輸出的字符串,通配符匹配的是文件的名稱.兩者操作的對象不一致.
匹配字符串問題
shell執行命令的時候,正則表達式是以整個輸出作為字符串內容,包括看不到的空格符號。
有些命令結果會輸出一個或者多個空格,有些命令不會輸出空格.
1.在表達式中()符號前面和{}括號前面都必須要加上\(\) 和 \{\}.
grep "^\(.*\):.*\1$" /etc/passwd
2.正則表達式默認從字符串的最前面開始查找,但是如果錨定的是行尾,那么正則會從尾部開始查找
1.從尾部開始查找
2.從頭部開始查找
3.分組實例
第一分組匹配到的字符串是7,最后面的[0-9]*\1 表示匹配到以7結尾而且7前面可以包含任意個數字的數字
基本正則和擴展正則的區別
1.基本正則語法 小括號和大括號前面需要加上\符號做轉義
grep -w "[0-9]\{2,3\}" /etc/passwd
2.擴展正則 小括號和大括號前面不要加上轉義字符
grep -Ew "[0-9]{2,3}" /etc/passwd
egrep -w "[0-9]{2,3}" /etc/passwd