正則表達式

第1章 企業案例故障

實例1-1             磁盤空間不足系列:

原因                          排查過程                             解決

1.block                  df -h; du -sh /data/* 具體的文件或目錄    確認之後刪除     

2.block                 lsof|grep delete                           重啓對應的服務

3.inode                 df -i; 找出系統中大於1M的目錄              刪除大量小文件

第2章 特殊符號

2.1 引號系列

2.1.1 “”          雙引號

引號內的特殊符號會被解析

2.1.2  ‘’          單引號

所見即所得,輸入什麼就輸出什麼

2.1.3 ``            反引號

$()==``

2.1.4              無引號

可以使用{}

2.2 重定向系列

>標準輸出重定向先把文件清空追加

>>標準輸出追加重定向

2> 標準錯誤輸出重定向

2>>

<標準輸入重定向 xargs tr

<<標準輸入追加重定向與cat配合追加多行內容

2>&1將錯誤和正確內容都記錄到文件中

2.3 位置系列

~          當前用戶家目錄

..          上一級目錄

.           當前目錄

-             參數  cd – su – 

2.4 判斷關係

&&     前面命令執行成功之後在執行後一個命令

||           前一個命令執行失敗之後執行後一個命令

[root@oldboyedu50-lnb ~]# ls /oldboy && echo 目錄已存在

ext     nginx.conf  oldboy.SH   oldboy.txt-hard  oldboy.txt-soft2  test.sh  t.sh.bak  xiaodong  xingfujie

jeacen  oldboy      oldboy.txt  oldboy.txt-soft  test              t.sh     wodi.gz   xiaofan   yingsui.gz

目錄已存在

[root@oldboyedu50-lnb ~]# ls /ooooo && echo 目錄已存在

ls: cannot access /ooooo: No such file or directory

 [root@oldboyedu50-lnb ~]# ls /ooooo || echo 目錄不存在

ls: cannot access /ooooo: No such file or directory

目錄不存在

2.5 無分類系列

#          註釋說明 顯示環靜變量的配置文件 root用戶的命令提示符

$          普通用戶命令提示符      awk取列

        ls運行上一個以ls開頭的命令並執行 !!運行上一個命令

|           管道符號

;           在同一行分割命令

2.6 通配符號

2.6.1 * 所有文件

1.以.conf結尾的文件

find /   -type f -name "*.conf"

2.找出系統中文件名包含ifconfig (文件名中有ifconfig就行)

方法一:

[root@oldboyedu50-lnb ~]# find /  -type f  -name "ifconfig"

/sbin/ifconfig

[root@oldboyedu50-lnb ~]#

[root@oldboyedu50-lnb ~]# find /  -type f  -name "*ifconfig*"

/usr/sbin/pifconfig

/usr/share/man/de/man8/ifconfig.8.gz

/usr/share/man/pt/man8/ifconfig.8.gz

/usr/share/man/man8/pifconfig.8.gz

/usr/share/man/man8/ifconfig.8.gz

/usr/share/man/fr/man8/ifconfig.8.gz

/sbin/ifconfig

方法二:

[root@oldboyedu50-lnb ~]# find /  -type f  |grep ifconfig

/usr/sbin/pifconfig

/usr/share/man/de/man8/ifconfig.8.gz

/usr/share/man/pt/man8/ifconfig.8.gz

/usr/share/man/man8/pifconfig.8.gz

/usr/share/man/man8/ifconfig.8.gz

/usr/share/man/fr/man8/ifconfig.8.gz

/sbin/ifconfig

2.6.2 {}           生成序列 備份

{} 生成序列

[root@oldboyedu50-lnb ~]# echo stu{01..5}

stu01 stu02 stu03 stu04 stu05

[root@oldboyedu50-lnb ~]#

[root@oldboyedu50-lnb ~]#

[root@oldboyedu50-lnb ~]# echo {1,5,100}

 

[root@oldboyedu50-lnb ~]# echo stu{01..10}

stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10

[root@oldboyedu50-lnb ~]# echo stu{01..10..2}

stu01 stu03 stu05 stu07 stu09

通過 {} 進行備份

[root@oldboyedu50-lnb ~]# cp  oldboy.txt{,.bak}

[root@oldboyedu50-lnb ~]# echo oldboy.txt{,.bak}

oldboy.txt oldboy.txt.bak

第3章 基礎正則表達式

3.1 符號比較

中文 ‘’       “”     ()         *  ……      |     {}  【】

英文    ''            ""         ()           .      *  ^         $      |  {}  []

爲grep配置別名

alias grep='grep --color'

alias egrep='egrep --color'

3.2 1個符號   ^  ....開頭的行

模擬文件

[root@oldboyedu50-lnb /oldboy]# cat 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!

 

第1個符號   ^

    以....開頭的行 ^m

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

my blog is http://oldboy.blog.51cto.com

my qq is 49000448

my god ,i am not oldbey,but OLDBOY!

cat -A 顯示文件中所有符號  每行結尾都會有個$

3.3 2個符號  $ 顯示文件結尾的行

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

my blog is http://oldboy.blog.51cto.com

our size is http://blog.oldboyedu.com

3.4 3個符號^$ 顯示空行

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

 

 

3.5 4個符號    .        任意一個字符

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

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

3.6 5個符號     \      轉義字符

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

I teach linux.

not 4900000448.

[root@oldboyedu50-lnb /oldboy]# tr  '\n'   '\t' <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! [root@oldboyedu50-lnb /oldboy]#

3.7 6個符號    *     一個字符連續出現00次以上

3.8 7個符號    .* 所有符號字符 包括空行

[root@oldboyedu50-lnb /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!

正則中表示 連續出現或所有的時候

正則表達式有貪婪性

替你尋找的文字符號     有多少吃多少  有多少匹配多少

 

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

I am oldboy teacher!

I like badminton ball ,billiard ball and chinese chess!

my blog is http://oldboy.blog.51cto.com

our size is http://blog.oldboyedu.com

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

 

3.9 8個符號 []每次匹配一個字符

grep '[a-z]' oldboy.txt

grep '[A-Z]' oldboy.txt

grep '[0-9]' oldboy.txt

 

grep '[a-zA-Z]' oldboy.txt

grep '[a-Z]' oldboy.txt

 

grep -i '[a-z]' oldboy.txt

     -i 不區分大小寫  ignore case

1.找出oldboy.txt中以m或n開頭的行

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

my blog is http://oldboy.blog.51cto.com

my qq is 49000448

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

2.找出oldboy.txt中以m或n開頭並且以m或n結尾的行

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

my blog is http://oldboy.blog.51cto.com

my qq is 49000448

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

[root@oldboyedu50-lnb /oldboy]# grep '^[mn]'  oldboy.txt|grep '[mn] $'

my blog is http://oldboy.blog.51cto.com

3.10 9個符號   [^] 每次匹配一個字符,顯示出除過這個字符的所有字符

[root@oldboy50-01 ~]# grep '[^ab]' oldboy.tat

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!

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

[root@oldboyedu50-lnb /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!

第4章 擴展正則表達式 ERE Extented Regular Expression)

4.1 10個符號   +    前一個字符連續出現1次或1次以上

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

my qq is 49000448

not 4900000448.

[root@oldboyedu50-lnb /oldboy]# grep -E '0+' oldboy.txt

my qq is 49000448

not 4900000448.

[root@oldboyedu50-lnb /oldboy]# grep '0\+' oldboy.txt

my qq is 49000448

not 4900000448.

[root@oldboyedu50-lnb /oldboy]# egrep '0+' oldboy.txt -o

000

00000

1.取出連續出現的小寫字母

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

4.2 11個符號  |  或者

[root@oldboyedu50-lnb /oldboy]# egrep 'oldboy|linux'   oldboy.txt

I am oldboy teacher!

I teach linux.

my blog is http://oldboy.blog.51cto.com

our size is http://blog.oldboyedu.com

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

[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

實例4-1             [^]grep -v

[^a-z]          排除按字符 某個字符 某些字符

grep -v [a-z]   排除按行

[root@oldboyedu50-lnb /oldboy]# grep '[^a-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!

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

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

[root@oldboyedu50-lnb /oldboy]# grep -v '[a-z]'  oldboy.txt

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

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

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

[root@oldboyedu50-lnb /oldboy]# egrep 'oldb(o|e)y'  oldboy.txt

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' 後兩個井號之間使用  \數字 引用

[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>

[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

[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

4.4 13個符號   {}    0{n,m}表示至少出現了n次,最多出現m

[root@oldboyedu50-lnb /oldboy]# egrep '0{3,4}' oldboy.txt

my qq is 49000448

not 4900000448.

[root@oldboyedu50-lnb /oldboy]# egrep '0{3}' oldboy.txt

my qq is 49000448

not 4900000448.

[root@oldboyedu50-lnb /oldboy]# egrep '0{3,4}' oldboy.txt

my qq is 49000448

not 4900000448.

[root@oldboyedu50-lnb /oldboy]# egrep '0{3}' oldboy.txt

my qq is 49000448

not 4900000448.

取×××號碼

[root@oldboyedu50-lnb /oldboy]# cat id.txt

金 211324198705244720

萬 500224197105168312

任 1231231231oldboy

任 3oldboy

任 lidao97303136098

任 alex2197303136098

任 350182197303oldgir

呂 211282199209113038

孔 150000198309176071

鄒 371001197412221284

賀 130185200011215926

杜 362522198711278101

向 14052219961008852X

[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

4.5 14個符號前一個字符連續出現0次或1

取出網卡的ip地址

方法1

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

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

方法二

[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:| Mask:"  '{print $2}'

10.0.0.200  


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