1. 程式人生 > >Shell學習之結合正則表達式與通配符的使用(五)

Shell學習之結合正則表達式與通配符的使用(五)

ron 命令 復制 所有 序列 沒有 換行符 逗號 gre

Shell學習之結合正則表達式與通配符的使用

目錄

通配符

  • 正則表達式與通配符
  • 通配符
  • 通配符的使用

正則表達式

  • 正則表達式
  • 正則表達式的使用

通配符

正則表達式與通配符

正則表達式用來在文件中匹配符合條件的字符串,正則是包含匹配。grep、awk、sed等命令可以支持正則表達式。

通配符用來匹配符合條件的文件名,通配符是完全匹配。ls、find、cp這些命令不支持正則表達式,所以只能使用shell自己的通配符來就行匹配。

  

通配符

符號	作用
*	匹配任何字符串/文本,包括空字符串;*代表任意字符(0個或多個) ls file *
?	匹配任何一個字符(不在括號內時)?代表人意1個字符 ls file 0
[abcd]	匹配abcd中任何一個字符
[a-z]	表示範圍a到z,表示範圍的意思 []匹配中括號中任意一個字符 ls file 0
{..}	表示生成序列。以逗號分隔,且不能有空格
補充	 
[!abcd]	或[^abcd]表示非,表示不匹配括號裏面的任何一個字符

  

通配符的使用

? 匹配任何一個字符

ls /bin/???

ls /bin/??

技術分享圖片

[abcd] 表示匹配中括號內任意一個字符就成

ls te[asb]t

技術分享圖片

{}生成序列

touch {a..c}

技術分享圖片

匹配文件

ls [a-c]

技術分享圖片

利用{}備份數據庫

表示將ae復制一份叫做affff
cp a{e,fff}

表示將ae做備份叫做ae.bak
cp a{e,e.bak}

  

技術分享圖片

!^表示非,取反

查找文件名裏沒有a和e的文件名
ls [!ae] ls [^ae]

  

技術分享圖片

正則表達式

正則表達式

技術分享圖片

正則表達式的使用

"*" 前一個字符匹配0次,或者任意多次

匹配至少包含有一個a的行
grep "aa*" test.txt

匹配至少包含有兩個a的行
grep "aaa*"


"."匹配除了換行符以外任意一個字符

匹配所有內容
grep ".*" test.txt

匹配在s與d之間一定有兩個字符的單詞
grep "s..d" test.txt

匹配在s與d之間有任意字符
grep "s.*d" test.txt


"^"匹配行首,"$"匹配行尾

匹配空白行
grep "^$" test.txt

匹配以大寫字母M開頭的行
grep "^M" test.txt

匹配以小寫字母m結尾的行
grep "m$" test.txt



"[]‘匹配中括號中指定的任意一個字符,只匹配一個字符
匹配s和i字母中,要不是a、要不是b grep "s[ao]id" test.txt 匹配任意一個數字 grep "[0-9]" test.txt 匹配用小寫字母開頭的行 grep "^[a-z]" test.txt "[^]"匹配除中括號的字符以外的任意一個字符 匹配不用小寫字母開頭的行 grep "[^a-z]" test.txt 匹配不用字母開頭的行 grep "^[^a-zA-Z]" test.txt "\" 轉義符 匹配以點結尾的行 grep "\.$" test.txt "\{n\}" 表示其前面的字符恰好出現n次 匹配a字母連續出現三次的字符串 grep "a\{3\}" test.txt 匹配包含連續的三個數字的字符串 grep "[0-9]\{3\}" test.txt "\{n,\}" 表示其前面的字符出現不小於n次 匹配最少用連續三個數字開頭的行 grep "^[0-9]\{3,\}[a-z]" test.txt "\{n,m\}‘匹配其前面的字符至少出現n次,最多出現m次 匹配在字母s和字母i之間有最少一個a,最多三個a grep "sa\{1,3\}i" test.txt

  

Shell學習之結合正則表達式與通配符的使用(五)