基本正則表達式元字符:
字符匹配: .:匹配任意單個字符 grep "r..t" /etc/passwd []:匹配指定范圍內任意單個字符 [^]:匹配指定范圍外任意單個字符 [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:] grep "r[[:alpha:]][[:alpha:]]t" 匹配次數:寫在要指定其出現次數的字符的后面 *:匹配其前面的字符任意次 0,1,多次 grep "x\+y" abxy aby xxxxxy yab .*: 匹配任意長度的任意字符 \?:匹配其前字符0次或1次 \+:匹配其前的字符1次或多次,即字符出現至少1次 \{m\}:匹配其前字符m次 \{m,n\}:匹配其前字符至少m次,至多n次 \{0,n\}:至多n次 \{m,\}:至少m次 位置錨定: ^:行首錨定 寫在模式最左側 $:行尾錨定 寫在模式最右側 ^PATTERN$:用于PATTERN來匹配整行; ^$:空白行; ^[[:space:]]*$:空行或包含空白字符的行; \< 或 \b:詞首錨定,用于單詞模式的左側; \> 或 \b:詞尾錨定,用于單詞模式的右側; \<PATTERN\>:匹配完整單詞; 單詞:非特殊字符組成的連續字符(字符串)都稱為單詞; 分組及引用 \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理 反斜線表示轉義 \(xy\)*ab Note: 分組括號中的模式匹配到的內容會被正則表達式引擎自動記錄于內部的變量中,這些變量為: \1:模式從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字符; \2:模式從左側起,第二個左括號以及與之匹配的右括號之間的模式所匹配到的字符; \3 ...
grep命令: Global search REgular expression and Print out the line
作用:文本搜索工具,根據用戶指定的“模式(過濾條件)”對目標文本逐行進行匹配檢查;打印匹配到的行; 模式:由正則表達式的元字符及文本字符所編寫出的過濾條件; grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...] OPTIONS: --color=auto:對匹配到的文本著色后高亮顯示; -i: ignorecase 忽略字符大小寫 -o: 僅顯示匹配到的字符串本身 -v: invert-match 反向匹配 顯示未被匹配到的行 -E:支持使用擴展的正則表達式元字符; -q: --quiet, --silent:靜默模式,即不輸出任何信息; -A #:after, 后#行 -B #:before,前#行 -C #:context,前后各#行
egrep命令:
支持擴展的正則表達式實現類似于grep文本過濾功能;grep -E egrep [OPTIONS] PATTERN [FILE...] 選項: -i, -o, -v, -q, -A, -B, -C -G:支持基本正則表達式 擴展正則表達式的元字符: 字符匹配 .: 任意單個字符 []:指定范圍內的任意單個字符 [^]:指定范圍外的任意單個字符 次數匹配 *:任意次 0,1,多次 ?:0次或1次 +:其前字符至少1次 {m}:其前字符m次 {m,n}:其前字符至少m次至多n次 {0,n} {m,} 位置錨定 ^ 行首錨定 $ 行尾錨定 \< \b 詞首錨定 \> \b 詞尾錨定 分組及引用 (): 分組 括號內的模式匹配到的字符會被記錄于正則表達式引擎的內部變量中 后向引用:\1, \2, ... 或 a|b:a或者b; C|cat:C或cat (c|C)at:cat或Cat
練習
1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。
cp /etc/skel /home/tuser1 chmod -R go=--- /home/tuser1
2、編輯/etc/group文件,添加組hadoop。
echo "hadoop:x:2017:" >> /etc/group
3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id號;其家目錄為/home/hadoop。
echo "hadoop:x:1008:2017::/home/hadoop:/bin/bash" >> /etc/passwd
4、復制/etc/skel目錄為/home/hadoop,要求修改hadoop目錄的屬組和其它用戶沒有任何訪問權限。
cp -r /etc/skel /home/hadoop chmod go=--- /home/hadoop
5、修改/home/hadoop目錄及其內部所有文件的屬主為hadoop,屬組為hadoop。
chown -R hadoop:hadoop /home/hadoop
6、顯示/proc/meminfo文件中以大寫或小寫S開頭的行;用兩種方式;
grep "^[sS]" /proc/meminfogrep -i "^s" /pro/meminfo
7、顯示/etc/passwd文件中其默認shell為非/sbin/nologin的用戶;
grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1
8、顯示/etc/passwd文件中其默認shell為/bin/bash的用戶;
grep "/bin/bash" | cut -d: -f1
9、找出/etc/passwd文件中的一位數或兩位數;
grep -o "\<[0-9]\{1,2\}\>" /etc/passwd
10、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;
grep "^[[:space:]]\+" /boot/grub2/grub.cfg
11、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;
grep "^#[[:space:]]\+[^[:space:]]\+" /boot/grub2/grub.cfg
12、打出netstat -tan命令執行結果中以‘LISTEN’,后跟空白字符結尾的行;
netstat -tan | grep 'LISTEN[[:space:]]\+$'
13、添加用戶bash, testbash, basher, nologin (此一個用戶的shell為/sbin/nologin),而后找出當前系統上其用戶名和默認shell相同的用戶的信息;
grep -E "^([^:]+).*\1$" /etc/passwd
原創文章,作者:alonedreamer,如若轉載,請注明出處:http://www.www58058.com/68189
非常好,正則在手,天下我有,繼續加油!