第三週學習命令總結
正則表達式與grep命令文本過濾nginx
查找etc目錄下 全部包含conf字串的文件
ls -R /etc |grep conf
顯示/root/passwd文件中包含root字串所在的行並顯字符號
grep root /root/passwd
顯示passwd文件中,不包含bash字串的行,並顯示行號
grep -n -v bash passwd
顯示passwd文件中,包含root字串的行的總行數
grep -c root passwd
僅顯示/root/passwd文件中的root字串及所在的行號
grep -on root passwd
顯⽰/root/passwd文件中,包含root字串的⾏和其下2行的內容
grep -A2 root passwd
顯⽰/root/passwd文件中,包含root字串的行和其上2行的內容
grep -B2 root passwd
顯⽰/root/passwd文件中,包含root字串或包含nologin字串的⾏
grep -e root -nologin passwdgit
正則表達式
分兩類:基本正則表達式(BRE)和擴展正則表達式(ERE)。
元字符分類:字符匹配、匹配次數、位置錨定、分組。
程序支持:grep、sed、awk、vim、less、nginx、varnish等。
下面先介紹下基本正則表達式各元字符:
字符匹配:
.:匹配任意單個字符;
[]:匹配指定範圍內的任意單個字符,例如[A-Z0-9]:表示匹配一個大寫字符或數字;
[^]:匹配指定範圍外的任意單個字符;
[:alnum:]:字母和數字;
[:alpha:]:表明任何英文大小寫字符,亦即 A-Z, a-z;
[:lower:]:小寫字母 [:upper:] 大寫字母;
[:blank:]:空白字符(空格和製表符);
[:space:]:水平和垂直的空白字符(比[:blank:]包含的範圍廣);
[:cntrl:]:不可打印的控制字符(退格、刪除、警鈴...);
[:digit:]:十進制數字 [:xdigit:]十六進制數字;
[:graph:]:可打印的非空白字符;
[:print:]:可打印字符;
[:punct:]:標點符號。
注意:文件名通配符當中,表⽰0或多個任意字符,?表示任意一個單個字符。
匹配次數:用在要指定次數的字符後面,用於指定前面的字符要出現的次數
: 匹配前面的字符任意次,包括0次(貪婪模式:儘量長的匹配);
.* 任意長度的任意字符;
\? 匹配其前面的字符0或1次;
+ 匹配其前面的字符至少1次;
{n} 匹配前面的字符n次;
{m,n} 匹配前面的字符至少m次,至多n次;
{,n} 匹配前面的字符至多n次;
{n,} 匹配前面的字符至少n次。正則表達式
位置錨定:定位出現的位置
^:行首錨定,用於模式的最左側;
$:行尾錨定,用於模式的最右側;
^PATTERN$:用於模式匹配整行;
^$:空行;
^[[:space:]]*$:空白行;
\< 或 \b:詞首錨定,用於單詞模式的左側;
\> 或 \b:詞尾錨定;用於單詞模式的右側;
\<PATTERN\>:匹配整個單詞。vim
分組:
():將一個或多個字符捆綁在一塊兒,看成一個總體進行處理,如: (root)+;
分組括號中的模式匹配到的內容會被正則表達式引擎記錄於內部的變量中,這些變量的命名方式爲:
\1, \2, \3, ...
\1:表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符;
例如:
(string1+(string2))
\1:表示string1+(string2)
\2:表示string2
後向引用:引用前面的分組括號中的模式所匹配字符, 而非模式自己;
或者: |,例如:a|b: a或b C|cat: C或cat (C|c)at:Cat或cat。bash
egrep命令和擴展正則表達式:
egrep命令僅⽀持擴展正則表達式的⽂本過濾命令,等價於grep -E。
擴展正則表達式元字符: 字符匹配:
.:任意單個字符;
[]:指定範圍的字符;
[^]:不在指定範圍的字符。
次數匹配:區別基本正則表達式的是使⽤簡潔,不須要使⽤轉義符號(\)
*:匹配前面字符出現任意次;
?:匹配前面出現字符0次或1次;
+:匹配前面出現字符1次或屢次;
{m}:匹配前面出現字符n次;
{m,n}:匹配前面出現字符最少m次,最多n次。less
位置錨定:
^:匹配行首;
$:匹配行尾;
\<,\b:匹配詞首;
\>,\b:匹配詞尾。ide
分組:
():生成分組模式;
後向應用:\1,\2,...
或 :a|b:表示匹配a或b;
C|cat:表示匹配C或cat;
(C|c)at:表示匹配Cat或0cat學習
過濾出現0次或屢次的字母a
[root@magedu ~]# echo abaacaaad | grep -o "a*"
a
aa
aaa
過濾出現0次或1次的字母a
[root@magedu ~]# echo abaacd|grep -o "a\?"
a
a
a
過濾出現1次或屢次的字母a
[root@magedu ~]# echo zzzopabaacd|grep -o "a+"
a
aa
過濾出現2次字母a
[root@magedu ~]# echo abaacaaada|grep -o "a{2}"
aa
aa
過濾出現⾄少2次,最多4次的字母a
[root@magedu ~]# echo abaacaaada|grep -o "a{2,4}"
aa
aaa
過濾/root/passwd文件中,以root開頭的行
[root@magedu ~]# grep "^root" passwdspa
全部的權限最高只能是r
setfacl -m mask ::r f1.txt排序
ifconfig取前兩行
ifconfig |head -2
取ifconfig中的前兩行的IP數字
ifconfig |head -2 |tail -1 |tr -s " " |cut -d" " -f3
取df命令裏第五列的數字
df |tr -s " " %|cut -d% -f5
取df命令裏第五列的數字並將數字排序
df |tr -s " " %|cut -d% -f5|sort -nr
paste 合併兩個文件同行號的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默認用TAB
-s : 全部行合成一行顯示
例如paste -s f2
paste -s f2 f3
文本排序sort:
把整理過的文本顯示在STDOUT,不改變原始文件
sort [options] file(s)
經常使用選項:
-r 執行反方向(由上至下)整理
-R 隨機排序
-n 執行按數字大小整理
-f 選項忽略(fold)字符串中的字符大小寫
-u 選項(獨特,unique)刪除輸出中的重複行
-t c 選項使用c作爲字段界定符
-k X 選項按照使用c字符分隔的X列來整理可以使用屢次
1到94數字隨機排序
echo {1..94}|tr ' ' " \n"|sort -R |head -n1
uniq命令:從輸入中刪除先後相接的重複的行
-c : 顯示每行重複出現的次數
-d:只顯示重複過的行
-u: 只顯示沒有重複過的行
顯示訪問地址次數最多的前十個IP地址
grep命令選項:
--color=auto: 對匹配到的文本着色顯示
-m # 匹配#次後中止
-v 顯示不被pattern匹配到的行
-i 忽略字符大小寫
-n 顯示匹配的行號
-c 統計匹配的行數
-o 僅顯示匹配到的字符串
-q 靜默模式,不輸出任何信息
-A # after, 後#行
-B # before, 前#行
-C # context, 先後各#行
-e 實現多個選項間的邏輯or關係
grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整個單詞
-E 使用ERE
-F 至關於fgrep,不支持正則表達式
-f file 根據模式文件處理
正則表達式:
基本正則表達式元字符
字符匹配:
. 匹配任意單個字符
[] 匹配指定範圍內的任意單個字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^] 匹配指定範圍外的任意單個字符
[:alnum:] 字母和數字
[:alpha:] 表明任何英文大小寫字符,亦即 A-Z, a-z
[:lower:] 小寫字母 [:upper:] 大寫字母
[:blank:] 空白字符(空格和製表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的範圍廣)
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴...)
[:digit:] 十進制數字 [:xdigit:]十六進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
匹配次數:用在要指定次數的字符後面,用於指定前面的字符要出現的次數
egrep及擴展的正則表達式:
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
擴展正則表達式的元字符:
字符匹配:
. 任意單個字符
[] 指定範圍的字符
[^] 不在指定範圍的字符
擴展正則表達式:
次數匹配:
位置錨定:^ 行首$ 行尾\<, \b 語首\>, \b 語尾分組:()後向引用:\1, \2, ...或者:a|b a或bC|cat C或cat(C|c)at Cat或cat