擴展正則表達式 |
作者:左婷婷 歸檔:學習筆記 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 |
官方網站: | |
目 錄
1.3.2 #找出系統中文件名包含ifconfig (文件名中有ifconfig就行)
1.4.7 第6個符號* 前一個字符連續出現了0次或0次以上
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中以m或n開頭的行
[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中以m或n開頭並且以m或n結尾的行
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 找出文件中oldboy或linux
[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 取出含有oldboy,oldbey的字符串
[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 將數字123456以12<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
第三關命令