系統通配符號、系統正則符號,grep


系統通配符號、系統正則符號,grep

1 系統通配符號

系統通配符號:借助通配符號 匹配文件名稱信息

1.1 *: 匹配所有(任意)字符信息

找尋以old開頭的文件

find /oldboy -type f -name "old*"

找尋以.txt結尾的文件

find /oldboy -type f -name "*txt" 

找尋以old開頭,txt結尾的文件

find /oldboy -type f -name "old*txt" 

1.2 {}: 批量創建數據信息

echo{01..03}    echo {01..06..2}    echo {01,03,05}

不同序列信息,可以進行組合
echo A{A,B} echo A{A,} echo A{,B}

在這里,可以用序列組合來進行快速備份數據,快速還原數據。

1.2.1 快速備份網卡配置文件:

cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.bak} #備份命令
ll /etc/sysconfig/network-scripts/ifcfg-eth0* #查詢備份成功


1.2.2 快速還原網卡配置文件:

cp /etc/sysconfig/network-scripts/ifcfg-eth0{.bak,}

2 系統正則符合

系統正則符號:借助正則符號 匹配文件內容信息
基礎正則符號:grep sed awk識別
擴展正則符號:grep -E、egrep、sed -r、awk、grep '\擴展正則符號'

2.1 基礎正則符號

以下命令執行所需環境
cat >> oldboy.txt <<EOF
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!
EOF

2.1.1 ^:以什么開頭的信息進行過濾

grep "^I" oldboy.txt


2.1.2 $:以什么結尾的信息進行過濾

grep "g$" oldboy.txt


2.1.3 ^$:將查找的空行信息過濾

grep -v "^$" oldboy.txt

2.1.4 . 匹配任意一個且只有一個字符

grep . oldboy.txt -o	### -o表示命令執行過程


匹配一個字符並且一個字符一行顯示出來

2.1.5 *:匹配前一個字符連續出現0次或者多次

grep "0*" oldboy.txt -o		### -o表示命令執行過程

grep "0*" oldboy.txt		### 查找0出現的次數


2.1.6 .*:匹配文件所有內容信息

grep "^m.*g" oldboy.txt	grep "^m.*g " oldboy.txt


.*具有貪婪匹配,會匹配命令里所有m-g的內容,如第一條命令執行的結果。第二條命令在g后面空格,給予限制,所以第二條執行結果會是m-g空格的內容。

2.1.7 \:還原字符的本來意思,轉義符號

grep "\.$" oldboy.txt		###  ".$":表示查詢所有有字符的行信息  "\.$":表示查詢出以點結尾的行信息 


將沒有意義的字符信息,變成有意義的信息:
\t: 制表符 \n: 換行符 \r: 換行符

echo -e "oldboy01\noldboy02"		### \n: 換行符	


2.1.8 [] :匹配多個字符信息(或者關系)

grep [a-z] oldboy.txt


2.1.9 [^]:排除指定的字符信息不要進行匹配

grep [^a-z] oldboy.txt	###  顯示除a-z的所有內容信息

2.2 擴展正則符號

擴展正則符號

2.2.1 +:匹配前一個字符連續出現1次或者多次

grep -E "0+" oldboy.txt


2.2.2 |:匹配的信息之間是或者的關系

grep -Ev "^$|^#" oldboy.txt    ### 除去空行信息,以#開頭信息

-v:命令取反意思 ^$:空行 ^#:以#開頭

顯示oldboy信息或者oldbey信息

grep -E "oldb(o|e)y" oldboy.txt


2.2.3 ():將多個字符信息匯總為一個整體進行過濾

替換修改文件內容,后項引用前項

echo 123456|sed "s#123456#<123456>#g"

echo 123456|sed -r "s#(.*)#<\1>#g"


(.):匹配之前echo 123456的結果。也就是123456
\1:取用之前(.
)的內容

echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#\1#g"
echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#\1\2#g"
echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#<\1>\2\3\4\5\6#g"


2.2.4 {}:匹配前一個字符連續出現指定的次數

{n,m} :匹配前一個字符連續最少出現n次 最多出現m次
grep -E "0{3,5}" oldboy.txt :匹配0連續出現的次數

grep -E "0{3,5}" oldboy.txt -o -o:顯示命令執行過程

{n} :匹配前一個字符連續正好出現n次
grep -E "0{3}" oldboy.txt 匹配0連續出現3次

{n,}:匹配前一個字符連續最少出現n次,最多出現次數沒有限制
grep -E "0{2,}" oldboy.txt 匹配0最少2次,最多沒有限制

grep -E "0{2,}" oldboy.txt -o

{,m}:匹配前一個字符連續最少出現0次,最多出現次數m次
grep -E "0{,4}" oldboy.txt

2.2.5 ?:匹配前一個字符連續出現0次或者1次

grep -E "o?" oldboy.txt


2.2.6 補充:* + ? 區別

*:匹配前一個字符連續出現0次或者多次
+:匹配前一個字符連續出現1次或者多次
?:匹配前一個字符連續出現0次或者1次
正則匹配信息:
(1)具有貪婪匹配特性:
(2)過濾時顯示的信息不正確
grep過濾信息,過濾信息外面使用雙引號
sed awk過濾信息,過濾信息外面使用單引號

3 練習題:如何取出IP地址

3.1 sed命令取ip

1、獲取ip地址 ip address show eth0 =ip a s eth0

2、定位顯示ip地址的信息行 ip a s eth0|sed -n '3p'

3、取出指定ip指定信息 ip a s eth0|sed -n '3p'|sed -r "s#^.t (.)#\1#g"

ip a s eth0|sed -n '3p'|sed -r "s#^.t (.)#\1#g"|sed -r 's#(.)/24.$#\1#g'

ip a s eth0|sed -n '3p'=inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0
sed -r "s#^.t (.)#\1#g"=10.0.0.201/24 brd 10.0.0.255 scope global eth0
sed -r 's#(.)/24.$#\1#g'=10.0.0.201
4、命令整合:
(1)

sed -r 's#^.*t (.*)#\1#g'
sed -r 's#(.*)/24.*$#\1#g'

sed -r 's#^.*t (.*)/24.*$#\1#g'
整合后:ip a s eth0|sed -n '3p'|sed -r 's#^.*t (.*)/24.*$#\1#g'

(2)

sed -n '3p'
sed -r 's#^.*t (.*)/24.*$#\1#g'

sed -nr '3s#^.*t (.*)/24.*$#\1#gp'
整合后:ip a s eth0|sed -nr '3s#^.*t (.*)/24.*$#\1#gp'

3.2 grep命令取ip

1、獲取ip地址: ip address show eth0

2、定位顯示ip地址的信息行 ip a s eth0|grep -w inet
w:匹配整詞,精確地單詞,單詞的兩邊必須是非字符符號(即不能是字母數字或下划線)

3、取出ip地址信息 ip a s eth0|grep -w inet|grep "[0-9]+.[0-9]+.[0-9]+.[0-9]+"
"[0-9]+.[0-9]+.[0-9]+.[0-9]+" 對應ip地址格式 +:匹配一個字符連續出現1次或者多次

ip a s eth0|grep -w inet|grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+" -o|head -1

-o:顯示命令執行過程
head -1:之前結果取第一行
命令執行:
整合:ip a s eth0|grep -w inet|grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+" -o
整合后:ip a s eth0|grep -w inet|grep -E "([0-9]+.){3}[0-9]+" -o
([0-9]+.){3}:[0-9]+.出現3次,將[0-9]+.看成一個整體加上()指定出現3次加上{}=([0-9]+.){3}
ip a s eth0|grep -w inet|grep -E "([0-9]+.){4}" -o

"[0-9]+.[0-9]+.[0-9]+.[0-9]+" :在這里面,只有三次[0-9]+. 一次[0-9]+
將 "[0-9]+.[0-9]+.[0-9]+.[0-9]+" 變為"([0-9]+.){4}"實際上是多加了一個.(點)再執行命令中會顯示出/
ip a s eth0|grep -w inet|grep -E "([0-9]+.?){4}" -o|head -1
這條命令中,要將.(點)取消
點===.?
\表示取點的特殊意義
?表示匹配前面字符出現0次或1次
"([0-9]+.?){4}"的結果為:10.0.0.201
10.0.0.255 取消之前的 / 了
再取第一行,也就是10.0.0.201了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM