擴展正則表達式


 
 

 

擴展正則表達式

 

作者:左婷婷

歸檔:學習筆記

2018/7/31

 

快捷鍵:

Ctrl + 1    標題1

Ctrl + 2    標題2

Ctrl + 3    標題3

Ctrl + 4    實例

Ctrl + 5    程序代碼

Ctrl + 6    正文

格式說明:

藍色字體:註釋

×××背景:重要

綠色背景:注意


老男孩教育教學核心思想6重:重目標、重思路、重方法、重實踐、重習慣、重總結

學無止境,老男孩教育成就你人生的起點!

聯繫方式:

網站運維QQ交流羣:

Linux  385168604

架構師 390642196

Python 29215534

大數據 421358633

官方網站:

http://www.oldboyedu.com


 

1.1 時間... 2

1.2 通配符與特殊符號... 2

1.2.1 引號系列... 2

1.2.2 重定向符號... 2

1.2.3 位置符號... 3

1.2.4 &&||. 3

1.2.5 #   $    !   ; 的區別... 3

1.3 通配符... 3

1.3.1 #找出.conf結尾的文件... 4

1.3.2 #找出系統中文件名包含ifconfig (文件名中有ifconfig就行) 4

1.3.3 #{} 生成序列... 4

1.3.4 通過 {} 進行備份... 4

1.3.5 小結:... 5

1.4 正則表達式配合三劍客進行過濾... 5

1.4.1 grep egrep配置別名並永久生效... 5

1.4.2 1個符號   ^  ....開頭的行... 5

1.4.3 2個符號   $  ....結尾的行... 6

1.4.4 第三個符號   ^$ 顯示空行... 6

1.4.5 4個符號  .  任意一個字符... 6

1.4.6 5個符號顯示文件中以.()結尾的行... 6

1.4.7 6個符號前一個字符連續出現了0次或0次以上... 7

1.4.8 7個符號.*   顯示所有... 7

1.4.9 8個符號  [ ] 8

1.5 總結:... 8

1.6 預習... 8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.1 正則表達式-2- [oldboy]

[root@oldboyedu50 oldboy]# grep '[oldboy]'   oldboy.txt  取出的結果是一個一個字符,並不是oldboy單詞
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 size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
kasabks^^^^&&&&$$$####
[root@oldboyedu50 oldboy]#

[root@oldboyedu50-lnb /oldboy]# grep -o '[oldboy]'   oldboy.txt

o

l

d                                   ‘[oldboy]’是一個一個字符找的,如左邊顯示

b

o

y

l

l

b

d

o

b

l

l

b

l

l

1.1.1 找出oldboy.txt中以mn開頭的行

[root@oldboyedu50 oldboy]#  grep '^[mn]'  oldboy.txt   找出oldboy.txt中以m或n開頭的行
my blog is http://oldboy.blog.51cto.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu50 oldboy]#

1.1.2 找出oldboy.txt中以mn開頭並且以mn結尾的行

1.1.2.1  方法一

[root@oldboyedu50 oldboy]# grep '^[mn]'  oldboy.txt|grep '[mn]$'      找出oldboy.txt中以m或n開頭並且以m或n結尾的行
my blog is http://oldboy.blog.51cto.com

1.1.2.2  方法二

[root@oldboyedu50 oldboy]# grep '^[mn].*[mn]$'  oldboy.txt
my blog is http://oldboy.blog.51cto.com

1.2 9個符號-  [^] [^abc]

1.2.1 [^abc]相當於是一個符號(每次匹配1個字符) 找出除了a或除了b或除了c

[root@oldboyedu50 oldboy]# grep '[^abc]'  oldboy.txt    排除了a,b,c字符
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 size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
kasabks^^^^&&&&$$$####
[root@oldboyedu50 oldboy]#

1.2.2 排除文件中的數字和大小寫字母

[root@oldboyedu50 oldboy]# grep '[0-Z]' oldboy.txt   
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 size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
kasabks^^^^&&&&$$$####

1.3 基礎正則小結

基礎正則表達式

^

...開頭的行

$

...結尾的行

^$

空行

.

任意一個字符

*

前一個字符出現0次或0次以上

.*

所有

[]

[abc]  

[^]

[^abc]

1.4 擴展正則 ERE Extented Regular Expression)

+

前一個字符出現1次或1次以上

|

或者

()

表示一個整體  後向引用

{}

{m,n}   m表示最少出現幾次 n表示最多出現幾次

?

前一個字符出現0次或1

1.4.1   10個符號- +

       前一個字符連續出現1次或1次以上

1.4.1.1  找出連續出現1次或以上的0

[root@oldboyedu50 oldboy]# egrep '0+' oldboy.txt    找出連續出現1次或以上的0     
my qq is 49000448
not 4900000448.
[root@oldboyedu50 oldboy]#

[root@oldboyedu50-lnb /oldboy]# grep -E '0+' oldboy.txt     grep使用E參數和egrep用法相同

my qq is 49000448
not 4900000448.

 [root@oldboyedu50-lnb /oldboy]# grep '0\+' oldboy.txt     grep使用\和egrep用法相同

my qq is 49000448
not 4900000448.

[root@oldboyedu50-lnb /oldboy]# egrep '0+' oldboy.txt –o       執行過程  連續的

000

00000

1.4.1.2  取出連續出現的小寫字母

[root@oldboyedu50-lnb /oldboy]# egrep '[a-z]+'  oldboy.txt 

1.4.2 11個符號-   |  或者

1.4.2.1     找出文件中oldboylinux

[root@oldboyedu50 oldboy]#  egrep 'oldboy|linux'   oldboy.txt     找出文件中oldboy或linux
I am oldboy teacher!
I teach linux.
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
[root@oldboyedu50 oldboy]#

1.4.2.2  先備份 /etc/ssh/sshd_config 然後 排除 文件中的#號的行或空行

[root@oldboyedu50-lnb /oldboy]# cp /etc/ssh/sshd_config{,.bak}      備份

[root@oldboyedu50-lnb /oldboy]# egrep -v '^$|#' /etc/ssh/sshd_config     排除 文件中的#號的行或空行

Protocol 2

SyslogFacility AUTHPRIV

PasswordAuthentication yes

ChallengeResponseAuthentication no

GSSAPIAuthentication yes

GSSAPICleanupCredentials yes

UsePAM yes

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES

AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT

AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE

AcceptEnv XMODIFIERS

X11Forwarding yes

Subsystem   sftp    /usr/libexec/openssh/sftp-server

1.4.2.3  正則表達式-3-  [^#^$]  [^$] [^#$]

[] $ . 沒有特殊含義

[root@oldboyedu50 oldboy]#  grep '[^#^$]'  oldboy.txt      排除掉#或^或$
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 size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
kasabks^^^^&&&&$$$####
[root@oldboyedu50 oldboy]#

[root@oldboyedu50-lnb /oldboy]# grep '\.$'  oldboy.txt             過濾掉結尾爲點

I teach linux.

not 4900000448.

[root@oldboyedu50-lnb /oldboy]# grep '[.]$'  oldboy.txt            過濾掉結尾爲點

I teach linux.

not 4900000448.

1.4.2.4  正則表達式-4-  [^abc]  vs  grep -v

[^a-z]

排除按字符   某個字符 某些字符

grep -v [a-z]

排除按行

[root@oldboyedu50-lnb /oldboy]# grep '[^a-z]'  oldboy.txt     排除a-z字符

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 size is http://blog.oldboyedu.com

my qq is 49000448

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

+++++\\\\\\!!!!$$$$$$^^^

####!!!^^^^^$$$$@@@@@####

[root@oldboyedu50-lnb /oldboy]# grep -v '[a-z]'  oldboy.txt     過濾掉含有a-z字符的行

 

 

+++++\\\\\\!!!!$$$$$$^^^

####!!!^^^^^$$$$@@@@@####

 

1.4.3 12個符號- () 表示一個整體  反向引用/後向引用

1.4.3.1  取出含有oldboyoldbey的字符串

[root@oldboyedu50 oldboy]#  egrep 'oldb(o|e)y'  oldboy.txt   取出含有oldboy,oldbey的字符串
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my god ,i am not oldbey,but OLDBOY!

()反向引用/後向引用

思路:把你想要的內容保護起來 ()

       sed 's###g' 後兩個井號之間使用  \數字 引用

1.4.3.2  將數字123456<123456>的形式顯示

[root@oldboyedu50-lnb /oldboy]# echo 123456

123456

[root@oldboyedu50-lnb /oldboy]# echo '<123456>'

<123456>

[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(.*)#\1#g' 

123456

[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(.*)#<\1>#g' 將數字123456以<123456>的形式顯示

<123456>

1.4.3.3  將數字12345612<34>56的形式顯示

[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(34)#<\1>#g'

12<34>56

[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3#g'   只顯示56

56

[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3\2#g'  

5634

[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3\2\1#g'

563412

[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3<\2\1#g'

[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3<\2>\1#g'  倒着顯示

56<34>12

 

 

 

 

1.4.4 13個符號- { }

1.4.4.1  過濾出0至少出現三次,最多出現4

[root@oldboyedu50-lnb /oldboy]# egrep '0{3,4}' oldboy.txt   過濾出0至少出現三次,最多出現4次

my qq is 49000448

not 4900000448.

1.4.4.2  過濾出0只出現三次

[root@oldboyedu50-lnb /oldboy]# egrep '0{3}' oldboy.txt    過濾出0只出現三次

my qq is 49000448

not 4900000448.

1.4.4.3  顯示出正確的×××號碼

[root@oldboyedu50-lnb /oldboy]# egrep '[0-9X]{18}' id.txt    不精確

金 211324198705244720

萬 500224197105168312

呂 211282199209113038

孔 150000198309176071

鄒 371001197412221284

賀 130185200011215926

杜 362522198711278101

   XXXXXXXXXXXXXXXXXX

向 14052219961008852X

[root@oldboyedu50-lnb /oldboy]# egrep '[0-9]{17}[0-9X]' id.txt     精確顯示出

金 211324198705244720

萬 500224197105168312

呂 211282199209113038

孔 150000198309176071

鄒 371001197412221284

賀 130185200011215926

杜 362522198711278101

向 14052219961008852X

1.4.5 14個符號-

 ?表示前一個符號出現0次或1

 

1.5 取出網卡的ip地址

ip a       s    eth0   來顯示網卡的ip地址

ip address show eth0

1.5.1 ip地址步驟

1.定位 取出某一行

2.sed/awk 取出想要的內容

1.5.1.1  方法1

[root@oldboyedu50-lnb /oldboy]# ip a s eth0 |awk 'NR==3'|awk  -F"[ /]+"  '{print $3}'

先使用awk取出行然後在使用awk分割取列

10.0.0.200  

[root@oldboyedu50-lnb /oldboy]#

取出ifconfig eth0 ip地址和子網掩碼

[root@oldboyedu50-lnb /oldboy]# ifconfig eth0 |awk 'NR==2'

          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0

[root@oldboyedu50-lnb /oldboy]# ifconfig eth0 |awk 'NR==2' |awk -F"[ :]+"  '{print $4,$NF}'

10.0.0.200 255.255.255.0

1.5.1.2  方法二

[root@oldboyedu50-lnb /oldboy]# ifconfig eth0 |awk 'NR==2'

          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0

[root@oldboyedu50-lnb /oldboy]# ifconfig eth0 |awk 'NR==2' |awk -F"addr:|Bcast:"  '{print $2}'

10.0.0.200                                               使用awk -F"addr:|Bcast:"分割來取列

1.5.1.3  小結:

1.取出ip地址

2.awk方法 -F (指定分隔符)

 

 

 

 

 

 

 

 

 

 

1.6 總結:

1.正則 BRE ERE

2.排除文件中的空行或以#開頭的行 grep sed awk

3.取出網卡ip地址

ifconfig eth0

ip a

awk

sed

1.7 預習:

取出網卡ip 反向引用方法

取出stat /etc/hosts 文件權限 644 0644 

第三關命令


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章