基本正則表達(dá)式元字符:
字符匹配:
.:匹配任意單個(gè)字符
grep "r..t" /etc/passwd
[]:匹配指定范圍內(nèi)任意單個(gè)字符
[^]:匹配指定范圍外任意單個(gè)字符
[:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
grep "r[[:alpha:]][[:alpha:]]t"
匹配次數(shù):寫在要指定其出現(xiàn)次數(shù)的字符的后面
*:匹配其前面的字符任意次 0,1,多次
grep "x\+y"
abxy
aby
xxxxxy
yab
.*: 匹配任意長(zhǎng)度的任意字符
\?:匹配其前字符0次或1次
\+:匹配其前的字符1次或多次,即字符出現(xiàn)至少1次
\{m\}:匹配其前字符m次
\{m,n\}:匹配其前字符至少m次,至多n次
\{0,n\}:至多n次
\{m,\}:至少m次
位置錨定:
^:行首錨定 寫在模式最左側(cè)
$:行尾錨定 寫在模式最右側(cè)
^PATTERN$:用于PATTERN來(lái)匹配整行循诉;
^$:空白行;
^[[:space:]]*$:空行或包含空白字符的行;
\< 或 \b:詞首錨定,用于單詞模式的左側(cè)阳堕;
\> 或 \b:詞尾錨定袱院,用于單詞模式的右側(cè)嘁字;
\<PATTERN\>:匹配完整單詞蒿往;
單詞:非特殊字符組成的連續(xù)字符(字符串)都稱為單詞;
分組及引用
\(\):將一個(gè)或多個(gè)字符捆綁在一起棕诵,當(dāng)作一個(gè)整體進(jìn)行處理 反斜線表示轉(zhuǎn)義
\(xy\)*ab
Note:
分組括號(hào)中的模式匹配到的內(nèi)容會(huì)被正則表達(dá)式引擎自動(dòng)記錄于內(nèi)部的變量中裁良,這些變量為:
\1:模式從左側(cè)起,第一個(gè)左括號(hào)以及與之匹配的右括號(hào)之間的模式所匹配到的字符校套;
\2:模式從左側(cè)起趴久,第二個(gè)左括號(hào)以及與之匹配的右括號(hào)之間的模式所匹配到的字符;
\3
...
grep命令: Global search REgular expression and Print out the line
作用:文本搜索工具搔确,根據(jù)用戶指定的“模式(過(guò)濾條件)”對(duì)目標(biāo)文本逐行進(jìn)行匹配檢查彼棍;打印匹配到的行灭忠;
模式:由正則表達(dá)式的元字符及文本字符所編寫出的過(guò)濾條件;
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
OPTIONS:
--color=auto:對(duì)匹配到的文本著色后高亮顯示座硕;
-i: ignorecase 忽略字符大小寫
-o: 僅顯示匹配到的字符串本身
-v: invert-match 反向匹配 顯示未被匹配到的行
-E:支持使用擴(kuò)展的正則表達(dá)式元字符弛作;
-q: --quiet, --silent:靜默模式,即不輸出任何信息华匾;
-A #:after, 后#行
-B #:before映琳,前#行
-C #:context,前后各#行
egrep命令:
支持?jǐn)U展的正則表達(dá)式實(shí)現(xiàn)類似于grep文本過(guò)濾功能蜘拉;grep -E
egrep [OPTIONS] PATTERN [FILE...]
選項(xiàng):
-i, -o, -v, -q, -A, -B, -C
-G:支持基本正則表達(dá)式
擴(kuò)展正則表達(dá)式的元字符:
字符匹配
.: 任意單個(gè)字符
[]:指定范圍內(nèi)的任意單個(gè)字符
[^]:指定范圍外的任意單個(gè)字符
次數(shù)匹配
*:任意次 0,1,多次
?:0次或1次
+:其前字符至少1次
{m}:其前字符m次
{m,n}:其前字符至少m次至多n次
{0,n}
{m,}
位置錨定
^ 行首錨定
$ 行尾錨定
\< \b 詞首錨定
\> \b 詞尾錨定
分組及引用
(): 分組 括號(hào)內(nèi)的模式匹配到的字符會(huì)被記錄于正則表達(dá)式引擎的內(nèi)部變量中
后向引用:\1, \2, ...
或
a|b:a或者b萨西;
C|cat:C或cat
(c|C)at:cat或Cat
練習(xí)
1、復(fù)制/etc/skel目錄為/home/tuser1旭旭,要求/home/tuser1及其內(nèi)部文件的屬組和其它用戶均沒有任何訪問(wèn)權(quán)限谎脯。
cp /etc/skel /home/tuser1
chmod -R go=--- /home/tuser1
2、編輯/etc/group文件持寄,添加組hadoop源梭。
echo "hadoop:x:2017:" >> /etc/group
3、手動(dòng)編輯/etc/passwd文件新增一行稍味,添加用戶hadoop废麻,其基本組ID為hadoop組的id號(hào);其家目錄為/home/hadoop模庐。
echo "hadoop:x:1008:2017::/home/hadoop:/bin/bash" >> /etc/passwd
4烛愧、復(fù)制/etc/skel目錄為/home/hadoop,要求修改hadoop目錄的屬組和其它用戶沒有任何訪問(wèn)權(quán)限掂碱。
cp -r /etc/skel /home/hadoop
chmod go=--- /home/hadoop
5怜姿、修改/home/hadoop目錄及其內(nèi)部所有文件的屬主為hadoop,屬組為hadoop顶吮。
chown -R hadoop:hadoop /home/hadoop
6社牲、顯示/proc/meminfo文件中以大寫或小寫S開頭的行粪薛;用兩種方式悴了;
grep "^[sS]" /proc/meminfo
grep -i "^s" /pro/meminfo
7、顯示/etc/passwd文件中其默認(rèn)shell為非/sbin/nologin的用戶违寿;
grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1
8湃交、顯示/etc/passwd文件中其默認(rèn)shell為/bin/bash的用戶;
grep "/bin/bash" | cut -d: -f1
9藤巢、找出/etc/passwd文件中的一位數(shù)或兩位數(shù)搞莺;
grep -o "\<[0-9]\{1,2\}\>" /etc/passwd
10、顯示/boot/grub/grub.conf中以至少一個(gè)空白字符開頭的行掂咒;
grep "^[[:space:]]\+" /boot/grub2/grub.cfg
11才沧、顯示/etc/rc.d/rc.sysinit文件中以#開頭迈喉,后面跟至少一個(gè)空白字符,而后又有至少一個(gè)非空白字符的行温圆;
grep "^#[[:space:]]\+[^[:space:]]\+" /boot/grub2/grub.cfg
12挨摸、打出netstat -tan命令執(zhí)行結(jié)果中以‘LISTEN’,后跟空白字符結(jié)尾的行岁歉;
netstat -tan | grep 'LISTEN[[:space:]]\+$'
13得运、添加用戶bash, testbash, basher, nologin (此一個(gè)用戶的shell為/sbin/nologin),而后找出當(dāng)前系統(tǒng)上其用戶名和默認(rèn)shell相同的用戶的信息锅移;
grep -E "^([^:]+).*\1$" /etc/passwd