正則表達式與擴展正則表達式

基本正則表達式

字符匹配:
.:匹配任意單個字符
[]:匹配指定范圍內的任意單個字符
[^]:匹配指定范圍外的任意單個字符
[-]:匹配[]中指定范圍內的任意一個字符,要寫成遞增
POSIX字符類:
[:digit:]:匹配任意一個數字字符
[:lower:]:匹配小寫字母
[:upper:]:匹配大寫字母
[:alpha:]:匹配任意一個字母字符(包括大小寫字母)
[:alnum:]:匹配任意一個字母或數字字符
[:space:]:匹配一個包括換行符、回車等在內的所有空白符
[:punct:]:匹配標點符號
\:轉義符,將特殊字符進行轉義,忽略其特殊意義
匹配次數:
*:匹配前面的字符任意次
.*:任意長度的任意字符
\?:匹配其前面的字符0或1次;即前面的可有可無
\+:匹配其前面的字符至少1次;
\{m\}:匹配前面的字符m次;
\{m,n\}:匹配前面的字符至少m次,至多n次;
\{0,n\}:匹配前面的字符至多n次;
\{m,\}:匹配前面的字符至少m次;
位置錨定:
^:行首錨定;用于模式的最左側;
$:行尾錨定;用于模式的最右側;
^PATTERN$: 用于模式匹配整行;
^$: 空行;
^[[:space:]]*$:空白行
單詞錨定:
\< 或 \b:詞首錨定;用于單詞模式的左側;
\> 或 \b:詞尾錨定;用于單詞模式的右側;
\<PATTERN\>:匹配整個單詞;
分組:
\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理;\(xy\)*ab
Note: 分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, …
\1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符;
\2:從左側起,第二個左括號以及與之匹配右括號之間的模式所匹配到的字符;
\(ab\+\(xy\)*\):
\1: ab\+\(xy\)*
\2: xy
后向引用:引用前面的分組括號中的模式所匹配字符,(而非模式本身)

擴展正則表達式:

字符匹配
.:匹配任意單個字符
[]:匹配指定范圍內的任意單個字符
[^]:匹配指定范圍外的任意單個字符
[-]:匹配[]中指定范圍內的任意一個字符,要寫成遞增
POSIX字符類:
[:digit:]:匹配任意一個數字字符
[:lower:]:匹配小寫字母
[:upper:]:匹配大寫字母
[:alpha:]:匹配任意一個字母字符(包括大小寫字母)
[:alnum:]:匹配任意一個字母或數字字符
[:space:]:匹配一個包括換行符、回車等在內的所有空白符
[:punct:]:匹配標點符號
\:轉義符,將特殊字符進行轉義,忽略其特殊意義
匹配次數:
*:匹配前面的字符任意次
.*:任意長度的任意字符
?:匹配其前面的字符0或1次;即前面的可有可無
+:匹配其前面的字符至少1次;
{m}:匹配前面的字符m次;
{m,n}:匹配前面的字符至少m次,至多n次;
{0,n}:匹配前面的字符至多n次;
{m,}:匹配前面的字符至少m次;
位置錨定:
^:行首錨定;用于模式的最左側;
$:行尾錨定;用于模式的最右側;
^PATTERN$: 用于模式匹配整行;
^$: 空行;
^[[:space:]]*$:空白行
單詞錨定:
\< 或 \b:詞首錨定;用于單詞模式的左側;
\> 或 \b:詞尾錨定;用于單詞模式的右側;
\<PATTERN\>:匹配整個單詞;
分組:
():將一個或多個字符捆綁在一起,當作一個整體進行處理;
(xy)*abNote:分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, …
\1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符;
\2:從左側起,第:二個左括號以及與之匹配右括號之間的模式所匹配到的字符;
后向引用:引用前面的分組括號中的模式所匹配字符,(而非模式本身)
或者:
a|b
C|cat: C或cat

例題:
1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式)
grep “^[sS]” /proc/meminfo
? ? ? grep -i “^s” /proc/meminfo
? ? ? grep -e ^s -e ^S /proc/meminfo
? ? ? grep “^S \| ^s” /proc/meminfo

2、顯示/etc/passwd文件中不以/bin/bash結尾的行;
grep -v “/bin/bash$” /etc/passwd

3、顯示/etc/passwd文件中ID號最大的用戶的用戶名;
sort -t: -k 3 /etc/passwd | cut -d: -f 1 | tail -n 1

4、如果用戶root存在,顯示其默認的shell程序;
? id root &> /dev/null && grep “^root\>” /etc/passwd | cut -d: -f7

5、找出/etc/passwd中的兩位或三位數;
? grep “\<[0-9]\{2,3\}\>” /etc/passwd –color=auto
6、顯示/etc/rc.d/rc.sysinit文件中,至少以一個空白字符開頭的且后面存非空白字符的行;
grep “^[[:space:]]\+[^[:space:]]” /etc/rc.d/rc.sysinit
7、找出”netstat -tan”命令的結果中以’LISTEN’后跟0、1或多個空白字符結尾的行;
?? netstat -tan | grep “LISTEN[[:space:]]*$”

8、添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin);而后找出/etc/passwd文件中用戶名同shell名的行;
? ? ? ?? grep “^\([[:alnum:]]\+\>\).*\1$” /etc/passwd
9、顯示/etc/passwd文件中其默認shell為非/sbin/nologin的用戶;
grep -v “/sbin/nologin$” /etc/passwd
10、顯示/etc/passwd文件中其默認shell為/bin/bash的用戶;
grep “/bin/bash$” /etc/passwd

11、找出/etc/passwd文件中的一位數或兩位數:

grep –color=auto “\b[0-9]\{1,2\}\b” /etc/passwd

12、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;
grep “^[:space:]\+[^[:space:]]” /boot/grub/grub.conf

13、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;
grep “^#.*[:space:]\+[^[:space:]]” /boot/grub/grub.conf

14、使用echo命令輸出一個絕對路徑,使用grep取出其基名;
echo “/etc/passwd/” | grep -o “[[:alpha:]]\+” | tail -n
1擴展:取出其路徑名
echo “/etc/passwd” | sed ‘s@[^/]\+/\?$@@’

?例題:

1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用三種方式)
egrep “^[sS]” /proc/meminfo
? ? ?? egrep -i “^s” /proc/meminfo
? ? ?? egrep “^(s|S)” /proc/meminfo
2、顯示/etc/passwd文件中不以/bin/bash結尾的行;
? egrep -v “/bin/bash$” /etc/passwd
3、顯示/etc/passwd文件中ID號最大的用戶的用戶名;
sort -t: -k 3 /etc/passwd | cut -d: -f 1 | tail -n 1
4、如果用戶root存在,顯示其默認的shell程序;
id root &> /dev/null && egrep “^root\>” /etc/passwd | cut -d: -f7
5、找出/etc/passwd中的兩位或三位數;
egrep “\<[0-9]{2,3}\>” /etc/passwd
6、顯示/etc/rc.d/rc.sysinit文件中,至少以一個空白字符開頭的且后面存非空白字符的行;
egrep “^[[:space:]]+[^[:space:]]” /etc/rc.d/rc.sysinit
7、找出”netstat -tan”命令的結果中以’LISTEN’后跟0、1或多個空白字符結尾的行;
netstat -tan | egrep “LISTEN[[:space:]]*$”
8、添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin);而后找出/etc/passwd文件中用戶名同shell名的行;
egrep “^([[:alnum:]]+\>).*\1$” /etc/passwd
9、顯示/etc/passwd文件中其默認shell為非/sbin/nologin的用戶;
egrep -v “/bin/nologin” /etc/passwd
10、顯示/etc/passwd文件中其默認shell為/bin/bash的用戶;
egrep “/bin/bash” /etc/passwd
11、找出/etc/passwd文件中的一位數或兩位數;
egrep “\b[0-9]{1,2}\b” /etc/passwd

12、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;
egrep “[:space:]+[^[:space:]]” /boot/grub/grub.conf

13、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;
egrep “^#+[:space:]+[^[:space:]]” /boot/grub/grub.conf

14、打出netstat -tan命令執行結果中以‘LISTEN’,后或跟空白字符結尾的行;
egrep “^#.*[:space:]+[^[:space:]]” /boot/grub/grub.conf
15、使用echo命令輸出一個絕對路徑,使用grep取出其基名;
echo “/etc/passwd/” | egrep -o “[[:alpha:]]+” | tail -n 1
擴展:取出其路徑名
echo “/etc/passwd” | sed ‘s@[^/]\+/\?$@@’
16、顯示當前系統root、centos或user1用戶的默認shell和UID;
egrep ‘^(root|centos|user1)\>’ /etc/passwd | cut -d: -f1,3,7
17、找出/etc/rc.d/init.d/functions文件(centos6)中某單詞后面跟一個小括號的行;
egrep -o “^[_[:alpha:]]+\(\)” /etc/rc.d/init.d/functions

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/86847

(1)
thinkingthinking
上一篇 2017-09-10 19:10
下一篇 2017-09-10 20:27

相關推薦

  • Redhat的Linux產品版本AS/ES/WS的聯系與區別

    Redhat 有兩大Linux產品系列,其一是免費的Fedora Core系列主要用于桌面版本,提供了較多新特性的支持。另外一個產品系列是收費的Enterprise系列,這個系列分成:AS/ES/WS等分支,他 們都是redhat企業級Linux,簡稱為 RHEL AS 是超級服務器版(Advanced Server),他在標準Linux內核的基礎上,做了性…

    Linux干貨 2015-03-20
  • Linux系統的基礎命令及事例講解

    Linux操作系統是系統運維領域里逐步強大,逐步受到關注的一款開源系統,它包含里大量的命令及程序,以下是我在這一周內學到的幾種命令及獲取幫助命令的方法: 1  tty    tty是查看終端設備的一個命令,輸入之后系統會提示如下:    /dev/pts/1   其中pts代表是在命令行接口下終端類…

    Linux干貨 2016-10-30
  • NFS(Network File System)介紹與應用(雙httpd + php-fpm + nfs + mysql 搭建discuz論壇)

    NFS相關介紹 一、NFS簡介     1. NFS(Network File System): NFS是一個文件共享協議, 也是是在類Unix系統中在內核中實現的文件系統。      2. 起源: 最早是由SUN公司研發,非常古老,只是實現文件共享,安全控制方面比較簡…

    Linux干貨 2015-07-21
  • 第一篇博客

    我的第一篇博客以及接下來的每一篇都要獻給linux運維了。第一次接觸linux是在大三的時候,當時并沒有想到以后還會和linux邂逅并以此謀生。 首先就從最基礎的linux分區與掛載點開始了解介紹,我們熟悉的Windows系統下的分區都分配有盤符,像c盤,d盤之類的,用來存放各種軟件和文件。而linux也有自己的分區,并將分區掛載到不同的掛載點上,掛載是指將…

    2017-07-16
  • 第五周作業

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; ~]# grep  “^[[:space:]]\{1,\}” /boot/grup/grup.conf                     &…

    2017-03-01
  • echo命令的簡單用法和實例

        在CentOS 6.8版本下,通過實例的形式,展現選項和參數的靈活運用,可以簡明的了解echo的用法。 一、語法:echo [SHORT-OPTION]… [STRING]…??;echo [選項]…[參數]       作用:將需要的內容輸出到終端或者其他文件。 二、實例和選項參數的用法: (1)文本…

    Linux干貨 2017-03-27
欧美性久久久久