正則表達式入門及應用 以grep sed為例

regex

 

◆ 正則表達式

正則表達式是由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符) 不表示字符字面意義,而表示控制或通配的功能。 它與shell的通配符既有相似也有不同。

01

※ 轉義符\?可將帶有命令性質的符號作為一般字符使用。

正則表達式中,常用以下元字符來代表特定字符的集合:

02

◆ 分組

??? 1、正則表達式中,可以用\(\) 將一個或多個字符捆綁在一起,當作一個整體進行處理。以便于減少輸入量,并方便閱讀。如: \(root\)\+,代表”root”作為整體,至少出現一次。

??? 2、:分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這 些變量的命名方式為: \1, \2, \3, …

用法樣例: \(string1\+\(string2\)*\)

\1 相當于 :string1\+\(string2\)*

\2 相當于:string2


◆ 擴展正則表達式
擴展正則表達式的用法更加簡潔,但有時表達模糊,常見的擴展表達式符號有「 + 」、「 ? 」、「 | 」 等等。

03

◆ 通配符與正則表達式的區別

04

◆ 練習題

1、顯示三個用戶root、mage、wang的UID和默認shell

cat /etc/passwd | egrep -w “^(root|mage|wang)” | cut -d: -f1,7

2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一 個小括號的行

cat /etc/rc.d/init.d/functions | egrep -w “^[[:alpha:]]*_*.*\(\)”

3、使用egrep取出/etc/rc.d/init.d/functions中其基名

echo “/etc/rc.d/init.d/functions” | egrep -o “[^/]*/?$”

4、使用egrep取出上面路徑的目錄名

echo “/etc/rc.d/init” | egrep -o “^.*\/”

5、統計last命令中以root登錄的每個主機IP地址登錄次數

last |tr -s ‘ ‘ : | grep root | egrep “\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>”|cut -d: -f1,3 | uniq -c

6、利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255

[0-9]
[1-9][0-9]
1[0-9][0-9]
2[0-4][0-9]
25[0-5]

7、顯示ifconfig命令結果中所有IPv4地址

ifconfig |egrep -o “\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>”

8、將此字符串:welcome to magedu linux 中的每個字符去重并排序,重復次數多的排到前面

echo “welcome to magedu linux” |grep [[:alpha:]] -o|sort -n|uniq -c

◆ grep命令

grep命令,主要作用為將指定字符串的所在行進行輸出。全稱Global search REgular expression and Print out the line,使用正則表達式進行全局搜索并以行的形式輸出。

◆ 用法 grep [OPTIONS] PATTERN [FILE…]

◆例:

grep root /etc/passwd
grep “$USER” /etc/passwd
grep ‘$USER’ /etc/passwd
grep `whoami` /etc/passwd

05

※ 在grep中使用正則表達式時,正則表達式中以’ ‘括起來的內容,將被當做shell的通配符。
◆ egrep命令

egrep命令可以使用諸如包含「 + 」、「 ? 」、「 | 」等在內的擴展正則表達式。
同時也可以用grep -E來代替。

◆ 練習

1、顯示/proc/meminfo文件中以大小s開頭的行

cat /proc/meminfo | grep -i ^s

2、顯示/etc/passwd文件中不以/bin/bash結尾的行

cat /etc/passwd | grep -v “/bin/bash”

3、顯示用戶rpc默認的shell程序

cat /etc/passwd | grep -w rpc |cut -d ‘:’ -f7

4、找出/etc/passwd中的兩位或三位數

cat /etc/passwd | egrep -wo [[:digit:]]\{2,3}

5、顯示CentOS7的/etc/grub2.cfg文件中,至少以一個空白字符開頭的且后面有非 空白字符的行

cat /etc/grub2.cfg | egrep ^[[:space:]]\+.*[^[:space:]]

6、找出“netstat -tan”命令結果中以LISTEN后跟任意多個空白字符結尾的行

netstat -tan | grep “\<LISTEN\>[[:space:]]*$”

7、顯示CentOS7上所有系統用戶的用戶名和UID

cat /etc/passwd | cut -d : -f1,3 | tr : ‘ ‘

8、添加用戶bash、testbash、basher、sh、nologin(其shell為/sbin/nologin),找出/etc/passwd用戶名和shell同名的行

cat /etc/passwd | grep “\(\<[[:alnum:]]\+\).*/\1$”

◆ sed 命令

sed命令是針對文本流進行編輯的主要方式。它一次處理一行內容。處理時,把當前處理的行存儲在臨時 緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。然后讀入下行,執行下一個循環。

◆ 用法: sed [option]… ‘script’ inputfile…

06

◆ 編輯命令

07

◆ 利用sed進行查找替換

s///:查找替換,支持使用其它分隔符,s@@@,s###

替換標記:

g: 行內全局替換
p: 顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

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

(0)
無名無名
上一篇 2018-04-15
下一篇 2018-04-15

相關推薦

欧美性久久久久