shell正則表達式新手入門教程
前言
shell中總是會需要對文本字符串做各種各樣的剪切拼接等操作,除了 basename 和 dirname 這種簡單的函數(shù)外,還可以用正則表達式,定義模糊匹配的篩選規(guī)則
一、常規(guī)匹配
管道操作就是一種匹配方式,如用來查找用戶:
[root@hadoop-master ~]# cat /etc/passwd | grep zxd zxd:x:1001:1001::/home/zxd:/bin/bash
二、特殊字符
正則的強大就是因為可以使用各種各樣的特殊字符
^
匹配一行的開頭,如 ^ab 表示以 ab 開頭的所有行
[root@hadoop-master etc]# cat /etc/passwd | grep ^h halt:x:7:0:halt:/sbin:/sbin/halt hue:x:1000:1000::/home/hue:/bin/bash
$
匹配一行的結(jié)束,如 zxd$ 表示以 zxd 結(jié)尾的所有行
[root@hadoop-master etc]# cat /etc/passwd | grep t$ halt:x:7:0:halt:/sbin:/sbin/halt
一起使用 ^abc$,會匹配 abc,使用^$會匹配空行,加上-n參數(shù)會顯示行號
[root@hadoop-master daily_archive_func]# cat daily_archive_func.sh | grep -n ^$ 2: 9: 18: 22: 25: 29: 33: 41: 43: 44: 45: 46:
.
匹配一個任意的字符,如a..b會顯示包含a某某b的所有行
[root@hadoop-master etc]# cat passwd | grep -n r..t 1:root:x:0:0:root:/root:/bin/bash 10:operator:x:11:0:operator:/root:/sbin/nologin 12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
*
不單獨使用,與上一個字符連用,表示匹配上一個字符連續(xù)出現(xiàn)0次,1次或多次,如ro*t會匹配rt、rot、root、rooot。。。等所在的所有行
.*:任意字符出現(xiàn)任意次,空字符串也能匹配到
[root@hadoop-master etc]# cat passwd | grep -n ^z.*bash$ 23:zxd:x:1001:1001::/home/zxd:/bin/bash
字符區(qū)間
[ ] 表示匹配某個范圍內(nèi)的一個字符
[6,8]------匹配 6 或者 8
[0-9]------匹配一個 0-9 的數(shù)字
[0-9]*------匹配任意長度的數(shù)字字符串
[a-z]------匹配一個 a-z 之間的字符
[a-z]* ------匹配任意長度的字母字符串
[a-c, e-f]-匹配 a-c 或者 e-f 之間的任意字符
\
\表示轉(zhuǎn)義,并不會單獨使用。由于所有特殊字符都有其特定匹配模式,而我們剛好想匹配特殊字符本身時,就會碰到困難。
此時我們就要 將轉(zhuǎn)義字符和特殊字符連用,再加上單引號引起來,來表示特殊字符本身,例如一個對于腳本,找出所有包含 '$' 的行
三、示例
正則匹配手機號
注意點:shell中的 -E 表示支持擴展的正則表達式,本身是不支持部分規(guī)則的,如{}
總結(jié)
到此這篇關(guān)于shell正則表達式新手入門的文章就介紹到這了,更多相關(guān)shell正則表達式入門內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux下采用shell腳本實現(xiàn)批量為指定文件夾下圖片添加水印的方法
這篇文章主要介紹了linux下采用shell腳本實現(xiàn)批量為指定文件夾下圖片添加水印的方法,需要的朋友可以參考下2014-07-07Shell腳本實現(xiàn)的單機流量統(tǒng)計功能
這篇文章主要介紹了Shell腳本實現(xiàn)的單機流量統(tǒng)計功能,本文給出實現(xiàn)代碼和使用方法,及運行結(jié)果,需要的朋友可以參考下2014-11-11