Linux基礎知識(18): Shell編程——正則表達式、字符截取命令、字符處理命令


注:轉載請標明原文出處鏈接: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 符號“^”和符號“$”

符號“^”表示匹配行首,符號“$”表示行尾。

例如:

  1. “^m” 表示匹配以m開頭的行;
  2. “n$” 表示匹配以n結尾的尾;
  3. “^$” 表示匹配空白行;

在這裏插入圖片描述



1.3.4 符號“[]”

符號“[]”表示匹配中括號中指定的任意一個字符,僅匹配一個字符。

例如:

  1. “s[ao]id” 表示匹配字母s和字母i中是a字符或o字符的字符串;
  2. “[0-9]” 表示匹配任意一個數字;
  3. “^[a-z]” 表示匹配用小寫字母開頭的行;
  4. “^[^a-z]” 表示匹配不同小寫字母開頭的行;
  5. “^[^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 選項 文件名
其中選項參數及其作用分別爲:

  1. -f 列號 表示提取第幾列;
  2. -d 分隔符 表示按照指定分隔符來分割列;

在這裏插入圖片描述



默認以製表位爲分隔,如需要以其他字符作爲分隔,需要用-d選項,如下圖所示,以“:”作爲分隔。


在這裏插入圖片描述




2.2 printf命令

printf命令格式爲: printf ‘輸出類型輸出格式’ 輸出內容

其中輸出類型參數有:

  1. %ns 表示輸出字符串,n是數字表示輸出n個字符;
  2. %ni 輸出整數,n是數字表示輸出n個數字;
  3. %m.nf 輸出浮點數,m是數字表示輸出的整個數的位數,n是數字表示輸出小位數。例如%8.2f表示共輸出8位,其中小數是2位,整數是6位。

其中輸出格式參數有:

  1. \a 表示輸出警告聲音;
  2. \b 表示輸出退格鍵(Backspace鍵);
  3. \f 表示清除屏幕;
  4. \n 表示換行;
  5. \r 表示回車;
  6. \t 表示水平輸出退格鍵(Tab鍵);
  7. \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) 其中選項參數及作用爲:

  1. -n 表示一般sed命令會把所有數據都輸出到屏幕,如果-n選項,則會把經過sed命令處理的行輸出到屏幕。
  2. -e 表示允許對輸入數據應用多條sed命令編輯。
  3. -i 表示用sed的修改結果直接修改讀取數據的文件,而不是由屏幕輸出。

(2) 其中動作選項及其作用分別爲:

  1. a 表示在當前行後添加一行或多行;
  2. c 表示行替換,用c後面的字符串替換原始數據行;
  3. i 表示在當期行前插入一行或多行;
  4. d 表示刪除指定的行;
  5. p 表示輸出指定的行;
  6. 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 選項 文件名

其中選項參數及其作用分別爲:

  1. -f 表示忽略大小寫;
  2. -n 表示數值型進行排序,默認使用字符串型排序;
  3. -r 表示反向排序;
  4. -t 表示指定分隔符,默認是分隔符是製表符;
  5. -k n[,m] 表示按照指定的字段範圍排序。從第n字段開始,m字段結束(默認到行尾部);

舉例說明:
執行命令: sort /etc/passwd 結果按字母從小到大排序

在這裏插入圖片描述


執行命令: sort -r /etc/passwd 結果按字母從大到小排序。

在這裏插入圖片描述



3.2 wc命令

wc命令用於統計,其命令格式爲:wc 選項 文件名
其中選項參數及其作用分別爲:

  1. -l 表示只統計行數;
  2. -w 表示只統計單詞數;
  3. -m 表示只統計字符數;

在這裏插入圖片描述






參考資料

[1] shell編程之正則表達式



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章