文章目錄
注:轉載請標明原文出處鏈接:https://xiongyiming.blog.csdn.net/article/details/106505009
1 正則表達式
1.1 什麼是正則表達式
正則表達式是用於描述字符排列和匹配模式的一種語法規則,主要用於字符串的模式分割、匹配、查找及替換操作
1.2 正則表達式與通配符的區別
正則表達式用來在文件中匹配符合條件的字符串,正則是包含匹配。
grep、awk、sed等命令可以支持正則表達式。
通配符用來匹配符合條件的文件名,通配符是完全匹配。
ls、cp這些命令不支持正則表達式,所以只能使用shell自己的通配符來進行匹配。
1.3 基礎正則表達式
1.3.1 符號“*”
通過命令 vim .bashrc
添加命令 alias grep=’grep --color=auto’
來將匹配的內容用顏色標記出來(起別名)。
然後使用命令 source .bashrc
將文件生效(讓別名生效)。
使用命令:grep “a*” test.txt
結果如下圖所示,可以看出,所有內容全部顯示,匹配到字符a的內容用顏色被標記出來。
使用命令:grep “a*” test.txt
結果如下圖所示,可以看出只有a匹配到的結果顯示出來。
(1) “a*”
表示匹配所有內容;
(2) “aa*”
表示匹配至少包含有一個a的行;
(3) “aaa*”
表示匹配最少包含兩個連續a的字符串;
(4) “aaaa*”
表示匹配最少包含四個連續a的字符串;
執行各個命令結果對比如下圖所示:
1.3.2 符號“.”
符號“.
”表示匹配除了換行符外任意一個字符。
例如:
(1) “s..d”
表示匹配在s和d這兩個字母之間一定有兩個字符的字符串。
(2) “s.*d”
表示匹配在s和d這兩個字母之間任意字符的字符串
1.3.3 符號“^”和符號“$”
符號“^”表示匹配行首,符號“$”表示行尾。
例如:
“^m”
表示匹配以m開頭的行;“n$”
表示匹配以n結尾的尾;“^$”
表示匹配空白行;
1.3.4 符號“[]”
符號“[]”表示匹配中括號中指定的任意一個字符,僅匹配一個字符。
例如:
“s[ao]id”
表示匹配字母s和字母i中是a字符或o字符的字符串;“[0-9]”
表示匹配任意一個數字;“^[a-z]”
表示匹配用小寫字母開頭的行;“^[^a-z]”
表示匹配不同小寫字母開頭的行;“^[^a-zA-Z]
”匹配不同字母開頭的行;
1.3.5 符號“\”
符號“\”表示轉義符
“\.$”
表示匹配使用”.
”結尾的行
舉例說明匹配日期和IP地址
假設日期格式爲YYYY-MM-DD
匹配時間的命令爲: grep -n "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}" test.txt
匹配IP地址的命令爲:grep -n "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" test.txt
2 字符截取命令
2.1 cut命令
cut命令格式爲: cut 選項 文件名
其中選項參數及其作用分別爲:
-f 列號
表示提取第幾列;-d 分隔符
表示按照指定分隔符來分割列;
默認以製表位爲分隔,如需要以其他字符作爲分隔,需要用-d選項,如下圖所示,以“:
”作爲分隔。
2.2 printf命令
printf命令格式爲: printf ‘輸出類型輸出格式’ 輸出內容
其中輸出類型參數有:
%ns
表示輸出字符串,n是數字表示輸出n個字符;%ni
輸出整數,n是數字表示輸出n個數字;%m.nf
輸出浮點數,m是數字表示輸出的整個數的位數,n是數字表示輸出小位數。例如%8.2f
表示共輸出8位,其中小數是2位,整數是6位。
其中輸出格式參數有:
\a
表示輸出警告聲音;\b
表示輸出退格鍵(Backspace鍵);\f
表示清除屏幕;\n
表示換行;\r
表示回車;\t
表示水平輸出退格鍵(Tab鍵);\v
表示垂直輸出退格鍵(Tab鍵);
注:在awk命令的輸出中支持print和printf命令。
print :print會在每個輸出之後自動加入一個換行符(Linux默認沒有print命令)
printf:printf是標準格式輸出命令,並不會自動加入換行符,如果需要換行需要手工加入換行符。
2.3 awk命令
awk命令格式爲: awk ‘條件1{動作1} 條件2{動作2}…’ 文件名
其中條件參數有:
一般使用關係表達式作爲條件;
(1) x>10判斷變量 x是否大於10
(2) x>=10判斷變量 x是否大於等於10
(3) x<=10判斷變量 x是否小於等於10
其中動作參數有:
(1) 格式化輸出
(2) 流程控制語句
2.4 sed命令
sed是一種幾乎包括在所有Linux/UNIX平臺的輕量級流編輯器。
sed主要是用來將數據進行選取、替換、刪除、新增的命令。
sed命令格式爲:sed 選項 ‘動作’ 文件名
(1) 其中選項參數及作用爲:
- -n 表示一般sed命令會把所有數據都輸出到屏幕,如果-n選項,則會把經過sed命令處理的行輸出到屏幕。
- -e 表示允許對輸入數據應用多條sed命令編輯。
- -i 表示用sed的修改結果直接修改讀取數據的文件,而不是由屏幕輸出。
(2) 其中動作選項及其作用分別爲:
- a 表示在當前行後添加一行或多行;
- c 表示行替換,用c後面的字符串替換原始數據行;
- i 表示在當期行前插入一行或多行;
- d 表示刪除指定的行;
- p 表示輸出指定的行;
- s 表示用一個字符串替換另外一個字符串。格式爲: “行範圍s/舊字符串/新字符串/g”
舉例說明:
(1)執行命令:sed -n '2p' test.txt
查詢文件中第二行數據
(2)執行命令:sed '2d' test.txt
刪除文件中第二行的數據,原始文件數據不刪除。
執行命令:sed '1,,3d' test.txt
刪除文件中第1行至第3行的數據,原始文件數據不刪除。
(3)執行命令:sed '1s/ab1/sb1/g' test.txt
替換字符串,但原始文件數據不變。
需要改變原始文件數據,需要加入選項 -i
即可
3 字符處理命令
3.1 sort命令
sort命令用於排序,其命令格式爲:sort 選項 文件名
其中選項參數及其作用分別爲:
-f
表示忽略大小寫;-n
表示數值型進行排序,默認使用字符串型排序;-r
表示反向排序;-t
表示指定分隔符,默認是分隔符是製表符;-k n[,m]
表示按照指定的字段範圍排序。從第n字段開始,m字段結束(默認到行尾部);
舉例說明:
執行命令: sort /etc/passwd 結果按字母從小到大排序
執行命令: sort -r /etc/passwd
結果按字母從大到小排序。
3.2 wc命令
wc命令用於統計,其命令格式爲:wc 選項 文件名
其中選項參數及其作用分別爲:
- -l 表示只統計行數;
- -w 表示只統計單詞數;
- -m 表示只統計字符數;
參考資料
[1] shell編程之正則表達式