老男孩Linux運維第41期20171016第六週學習重點課堂記錄


 
 

 

Week6課堂知識點總結

 

作者:Old_Pan

歸檔:學習筆記

2017/10/16

 

 

1章正則表達式與通配符... 2

1.1 特殊符號... 2

1.2 通配符... 3

1.3 {} 生成序列... 4

1.4 正則表達式... 5

1.4.1 什麼是正則... 5

1.4.2 使用正則的時候注意事項... 5

1.4.3 正則表達式與通配符區別... 6

1.4.4 正則表達式分類... 6

1.4.5 準備測試環境... 6

1.4.6 基礎正則... 6

1.4.7 擴展正則ERE. 13

1.4.8 正則表達式總結... 21

1.4.9 基礎正則與擴展正則區別:21

2章練習題... 21

2.1 刪除掉文件中的空行... 21

2.2 取出eth0網卡的ip地址... 22

2.2.1 方法1awk 3個管道... 22

2.2.2 方法2awk 2個管道... 23

2.2.3 方法3awk 1個管道... 23

2.2.4 方法4awk 1個管道... 23

2.2.5 方法5grep 正則... 24

2.3 取出文件的數字權限 644 0644. 25

 

 

 

 

 

 

第1章 正則表達式與通配符

1.1 特殊符號

 

特殊符號

作用

單引號''

對括號中的內容不作任何解析,所見即所得,吃啥吐啥

雙引號""

和單引號類似,但是特殊符號會被解析 運行 $ $() `` !

反引號``

=== $() 先運行裏面的命令,然後把顯示到屏幕上的內容留下..

#

表示註釋以及root用戶命令提示符

$

1.取變量裏面的內容,例:$LANG$PATH

2.普通用戶的命令提示符  

3.sed -n '$p' oldboy.txt

4.awk   $1 $2  $NF 取某一列

5.NR----number of record(行號

!

1.使用運行歷史命令history,例:!nn是第幾條歷史命令

2.find awk表示取反、非

*

通配符,表示匹配一切

&&

前一個命令運行成功,再運行後面的命令,例:ifdown eth0 && ifup eth0

||

前一個命令運行失敗,再運行後面的命令

|

管道

?

通配符,表示匹配任意一個字符

\

1.轉義符號

2.臨時取消別名

 

 

 

1.2 通配符

通配符作用:用來匹配文件名

 

* 所有、任何東西

找出以 *.txt*.log

ls -l *.txt *.log 

 

找出/oldboy 目錄中 文件名中包含oldboy的文件

      mkdir -p/oldboy
      touch/oldboy/oldboy{01..10}.txt /oldboy/stu-oldboy{01..10}.txt  oldboy oldboy.txt
 
      find/oldboy/  -name *oldboy*



1.3 {} 生成序列

 #生成序列

     echo {a..z}

     echo {1..10}

     echo {01..10}

     echo {001..10}

     echo {01..10}

     echo {01..100}

 

 #指定每次變化多少

[root@oldboyedu41-1 tmp]# echo {01..10..2}
01 03 05 07 09
[root@oldboyedu41-1 tmp]# echo {a..z..2}
a c e g i k m o q s u w y
[root@oldboyedu41-1 tmp]# echo stu{01,05,10}
stu01 stu05 stu10


 #通過{}對某個文件進行備份

[root@oldboyedu41-nb oldboy]# echo A{B,C}
AB AC
[root@oldboyedu41-nb oldboy]# echo A{,C}
A AC
[root@oldboyedu41-nb oldboy]#
[root@oldboyedu41-nb oldboy]# echo oldboy.txt{,C}
oldboy.txt oldboy.txtC
[root@oldboyedu41-nb oldboy]# echo oldboy.txt{,.bak}
 oldboy.txt oldboy.txt.bak
[root@oldboyedu41-nb oldboy]# touch oldboy.txt
[root@oldboyedu41-nb oldboy]# cp oldboy.txt{,.bak}
[root@oldboyedu41-nb oldboy]# #cp oldboy.txt{,.bak}
[root@oldboyedu41-nb oldboy]# #cp oldboy.txt oldboy.txt.bak
[root@oldboyedu41-nb oldboy]# echo oldboy.txt{,.bak}
oldboy.txt oldboy.txt.bak

 

1.4 正則表達式

1.4.1 什麼是正則

又稱規則表達式。(英語:RegularExpression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表通常被用來檢索、替換那些符合某個模式(規則)的文本。

創建試驗環境:

cat > test.txt <<EOF
oldboy 230xxxxxxxxxxxxxxxxxxx
oldboy01
oldboy43.txt
oldboy-lidao.txt
oldboybaby
oldbabay
EOF

 

找出文件中包含數字的行

grep "[0-9]" test.txt


通過一種符合表示不同的數字 字母 ====== 正則表達式(特殊符號 ^ $ + . * 表示各種不同的字符)

   

1.4.2 使用正則的時候注意事項

     1# 正則表達式是高級貨色linux三劍客 grep sed awk

     2# 正則表達式匹配按照行爲單位的

     grep "^oldboy" oldboy.txt

     3# 使用的時候注意 使用英文符號,    禁止使用中文符號

     4# 給grep/egrep 加上一個別名可以增加顏色區分顯示結果

     

     cat >>/etc/profile<<EOF
     alias grep='grep --color=auto'
     alias egrep='egrep --color=auto'
     EOF
     source /etc/profile
     
     [root@oldboyedu41-nb oldboy]# alias grep egrep 
     alias grep='grep --color=auto'
     alias egrep='egrep --color=auto'

1.4.3 正則表達式與通配符區別

     1# 正則表達式高級貨色        查找文件內容 文字符號 grep sed awk 三劍客支持  python java

     2# 通配符        查找文件名字大部分linux命令都可以使用 通配符 *.txt  *.log

     

1.4.4 正則表達式分類

1、 基礎正則  ^  $ .  *  []   basic     regular  expression BRE

2、擴展正則  +  |  (){} ?      extended  regular expression  ERE

1.4.5 準備測試環境

[root@oldboyedu41-nb oldboy]# cat -noldboy.txt
    1  I am oldboy teacher!
    2  I teach linux.
    3  
    4  I like badminton ball ,billiardball and chinese chess!
    5  my blog ishttp://oldboy.blog.51cto.com 
    6  our site ishttp://www.etiantian.org 
    7  my qq num is 49000448.
    8  
    9  not 4900000448.
   10  my god ,i am not oldbey,butOLDBOY!


1.4.6 基礎正則

1.4.6.1  ^  表示以....開頭的行

[root@oldboyedu41-nb oldboy]# grep"^m" oldboy.txt
my blog is http://oldboy.blog.51cto.com 
my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY!

1.4.6.2  $  ....結尾的行

cat -A可以在文件每一行最後加上結尾符$

[root@oldboyedu41-nb oldboy]# cat -Aoldboy.txt
I am oldboy teacher!$
I teach linux.$
$
I like badminton ball ,billiard ball andchinese 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!$
[root@oldboyedu41-nb oldboy]# grep"m$" oldboy.txt
my blog is http://oldboy.blog.51cto.com

1.4.6.3  空行 ^$ 這一行中沒有任何符號

[root@oldboyedu41-nb oldboy]# grep -n"^$" oldboy.txt
3:
8:
[root@oldboyedu41-nb oldboy]# cat -noldboy.txt
    1  I am oldboy teacher!
    2  I teach linux.
    3  
    4  I like badminton ball ,billiardball and chinese chess!
    5  my blog ishttp://oldboy.blog.51cto.com
    6  our site ishttp://www.etiantian.org
    7  my qq num is 49000448.
    8  
    9  not 4900000448.
   10  my god ,i am not oldbey,butOLDBOY!

 #排除空行

[root@oldboyedu41-nb oldboy]# grep -v"^$" oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball andchinese 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!

1.4.6.4  .()  匹配任意一個字符不匹配空行

[root@oldboyedu41-nb oldboy]# #grep -o  "." oldboy.txt
[root@oldboyedu41-nb oldboy]# #-o grep命令每次 匹配到了什麼
[root@oldboyedu41-nb oldboy]# grep -o  "." oldboy.txt

1.4.6.5  \  轉義字符 脫掉馬甲 打回原形

#找出文件中oldboy.txt .結尾的行 

[root@oldboyedu41-nb oldboy]# grep"\.$" oldboy.txt
I teach linux.
my qq num is 49000448.
not 4900000448.

   \n  回車換行  

     

#^ $ ^$  .

#grep -o 顯示grep命令每次找到的內容      

   

1.4.6.6  * 前一個字符連續出現0次或1次以上 >=0   

[root@oldboyedu41-nb oldboy]# grep"0" oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu41-nb oldboy]# grep -o"0" oldboy.txt
0
0
0
0
0
0
0
0
[root@oldboyedu41-nb oldboy]# grep -on"0" oldboy.txt
7:0
7:0
7:0
9:0
9:0
9:0
9:0
9:0


[root@oldboyedu41-nb oldboy]# grep"0*" oldboy.txt
I am oldboy teacher!
I teach linux.
 
I like badminton ball ,billiard ball andchinese 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!
[root@oldboyedu41-nb oldboy]# grep -o"0*" oldboy.txt
000
00000


連續出現

0

0000 

000000   

   

####正則中表示連續出現或所有的時候 ----- 貪婪性

   

   #"0*" 爲何會把整個文件的內容顯示出來

    #0連續出現了1次以上 000 00000  0000000

    #0連續出現了0  會把整個文件的內容都顯示出來"0*"  ==== ""

   grep ""  oldboy.txt

    I am oldboy teacher!

    I teach linux.

   

    Ilike 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!

 

1.4.6.7  .* 所有任何東西

[root@oldboyedu41-nb oldboy]# grep -n"^.*o" oldboy.txt
1:I am oldboy teacher!
4:I like badminton ball ,billiard ball andchinese chess!
5:my blog is http://oldboy.blog.51cto.com
6:our site is http://www.etiantian.org
9:not 4900000448.
10:my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu41-nb oldboy]# #    #正則中表示連續出現或所有的時候 ----- 貪婪性
[root@oldboyedu41-nb oldboy]#      #有多少匹配多少有多少吃多少


       #我要找以m開頭的行 並且 m結尾的行

[root@oldboyedu41-nb oldboy]# ##我要找以m開頭的行並且 以m結尾的行
[root@oldboyedu41-nb oldboy]# grep"^m" oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu41-nb oldboy]# grep"^m$" oldboy.txt
[root@oldboyedu41-nb oldboy]# #grep"^m什麼都可以m$"oldboy.txt
[root@oldboyedu41-nb oldboy]# grep "^m什麼都可以m$" oldboy.txt
[root@oldboyedu41-nb oldboy]# grep"^m.*m$" oldboy.txt
my blog is http://oldboy.blog.51cto.com

1.4.6.8  [] [abc] 表示一個整體相當於是一個符號 表示包含a或者b或者c的行

          grep "[abc]"        oldboy.txt

          grep "[a-z]"        oldboy.txt

          grep "[A-Z]"        oldboy.txt

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

          grep "[0-9]"        oldboy.txt

          grep "[a-zA-Z0-9]"  oldboy.txt

       

練習3: mno開頭的 並且以  mg 結尾的行

[root@oldboyedu41-nb oldboy]# grep"^[mno]" oldboy.txt
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!
[root@oldboyedu41-nb oldboy]# grep "^[mno].*[mg]$"oldboy.txt
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org


[root@oldboyedu-41-01 tmp]# grep"[a-Z]" oldboy.txt


[root@Centos6p9m1 oldboy]# grep"^[m|n|o].*[m|g]$" oldboy.txt
[root@Centos6p9m1 oldboy]# grep"^[m,n,o].*[m,g]$" oldboy.txt
[root@oldboyedu41-nb oldboy]# #在正則中括號中 特殊符號(正則表達式符號) 一般都沒有特殊含義
[root@oldboyedu41-nb oldboy]# #grep"\.$"
[root@oldboyedu41-nb oldboy]# #grep"[.]$"


問題:-  表示非特殊符號  在這裏怎麼是從a到z啦?

 


1.4.6.9  [^] [^abc] 表示一個整體相當於是一個符號 表示包含a或者b或者c的行

                   第一個位置 排除

[root@oldboyedu41-nb oldboy]# grep"[xlc]" oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball andchinese chess!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu41-nb oldboy]# grep"[^xlc]" oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball andchinese 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!


[root@Gloria ~]# grep"[^m^n^o].*[m$g$]" oldboy.txt


[^m^n^o]表示 : 排除m^no

 


[root@oldboyedu oldboy]# grep"[^m-m$]" oldboy.txt  

   

1.4.6.10  基礎正則表達式小結:

(1)   .^  $  ^$ .*  [abc] 

(2)   grep  grep -o             -o參數把找到的東西顯示出來

 

1.4.7 擴展正則ERE

1.4.7.1  +  前一個字符連續出現1次或多次 >=1

[root@oldboyedu41-nb oldboy]# grep"0+" oldboy.txt
[root@oldboyedu41-nb oldboy]# egrep"0+" oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu41-nb oldboy]# #egrep ===grep -E 
[root@oldboyedu41-nb oldboy]# egrep"0+" oldboy.txt -o
000
00000
[root@oldboyedu41-nb oldboy]# #取出文件中連續出現的小寫字母?
[root@oldboyedu41-nb oldboy]# egrep'[a-z]+' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball andchinese 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!
-----oooo
[root@oldboyedu41-nb oldboy]# egrep '[a-z]+'oldboy.txt -o
 
#連續出現 000000  00000  abcd 
[root@oldboyedu41-nb oldboy]# egrep"[0-9]" oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
not 4900000448.
[root@oldboyedu41-nb oldboy]# egrep"[0-9]" oldboy.txt -o
5
1
4
9
0
0
0
4
4
8
4
9
0
0
0
0
0
4
4
8
[root@oldboyedu41-nb oldboy]# 
[root@oldboyedu41-nb oldboy]# egrep"[0-9]+" oldboy.txt 
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
not 4900000448.
[root@oldboyedu41-nb oldboy]# egrep"[0-9]+" oldboy.txt  -o
51
49000448
4900000448
[root@oldboyedu41-nb oldboy]# #+ 連續出現的東西 一次性取出來 變爲一個整體

1.4.7.2  | 表示或者

[root@oldboyedu41-nb oldboy]# egrep 'a|b|c'oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball andchinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu41-nb oldboy]# egrep"[abc]" oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball andchinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu41-nb oldboy]# 
[root@oldboyedu41-nb oldboy]# egrep"oldboy|oldbey" oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!

1.4.7.3  () 的作用:1括號裏面的內容相當於是一個整體,先算括號裏面的內容;2反向引用(sed

[root@oldboyedu41-nb oldboy]# egrep"oldboy|oldbey" oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu41-nb oldboy]# egrep"oldbo|ey" oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu41-nb oldboy]# egrep"oldb(o|e)y" oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!

2、反向引用(sed 先保護再使用

[root@oldboyedu41-nb oldboy]# echo 123456
123456
[root@oldboyedu41-nb oldboy]# echo 123456
123456
[root@oldboyedu41-nb oldboy]# echo123456|sed 's#.*##g'
 
[root@oldboyedu41-nb oldboy]# echo 123456|sed's#.*#a#g'
a
[root@oldboyedu41-nb oldboy]##<123456>
[root@oldboyedu41-nb oldboy]# echo123456|sed -r 's#(.*)#\1#g'
123456
[root@oldboyedu41-nb oldboy]# echo123456|sed -r 's#(.*)#<\1>#g'
<123456>


[root@oldboyedu41-nb oldboy]# echo123456|sed -r 's#(.*)#\1#g'
123456
[root@oldboyedu41-nb oldboy]# echo123456|sed -r 's#(.*)#@@@\1@@@@#g'
@@@123456@@@@
[root@oldboyedu41-nb oldboy]# echo123456|sed -r 's#(.*)#<\1>#g'
<123456>
[root@oldboyedu41-nb oldboy]# 
[root@oldboyedu41-nb oldboy]# echo123456|sed -r 's#..(.)...#\1#g'
3
[root@oldboyedu41-nb oldboy]# echo123456|sed -r 's#..(.)...#\2#g'
sed: -e expression #1, char 15: invalidreference \2 on `s' command's RHS
[root@oldboyedu41-nb oldboy]# echo123456|sed -r 's#(.).(.)...#\2#g'
3


echo 123456 |sed -r 's#(1)(5)#+\1+3\23#g'

 

[root@instance-kapw2maf ~]# echo 123456|sed 's#(.)(.)(.)#<\2>#g' -r
<2><5>


1.4.7.4  a{n,m} 0{n,m} 前一個字符連續出現了最少n次,最多出現了m

   

   *  >=0

   +  >=1

 

[root@oldboyedu41-nb oldboy]# egrep'0{1,3}' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu41-nb oldboy]# egrep'0{1,3}' oldboy.txt -o
000
000
00
[root@oldboyedu41-nb oldboy]# egrep'0{1,3}' oldboy.txt -on
7:000
9:000
9:00
[root@oldboyedu41-nb oldboy]# egrep'0{1,3}' oldboy.txt 
[root@oldboyedu41-nb oldboy]# egrep '0{2,4}'oldboy.txt 
my qq num is 49000448.
not 4900000448.
[root@oldboyedu41-nb oldboy]# egrep'0{2,4}' oldboy.txt  -o
000
0000
[root@oldboyedu41-nb oldboy]# egrep'0{2,4}' oldboy.txt  -on
7:000
9:0000
 
#找出文件中連續出現5次到6次的字母
[root@oldboyedu41-nb oldboy]# egrep   '[a-z]{5,6}' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball andchinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu41-nb oldboy]# egrep  -w '[a-z]{5,6}' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball andchinese chess!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu41-nb oldboy]# 
[root@oldboyedu41-nb oldboy]# egrep  -wo '[a-z]{5,6}' oldboy.txt
oldboy
teach
linux
chess
oldboy
oldbey
[root@oldboyedu41-nb oldboy]# egrep  -won '[a-z]{5,6}' oldboy.txt
1:oldboy
2:teach
2:linux
4:chess
5:oldboy
10:oldbey
[root@oldboyedu41-nb oldboy]# egrep  -woni '[a-z]{5,6}' oldboy.txt
1:oldboy
2:teach
2:linux
4:chess
5:oldboy
10:oldbey
10:OLDBOY
 
#-w grep按照單詞進行匹配(全字符精確匹配/完全匹配)
 
grep oldboy test.txt 
oldboy 
oldboybaby 
testoldboy
helloldboy 
 
grep -w oldboy test.txt 
oldboy


[root@oldboyedu oldboy]# egrep '[a-z]+ {1,5}' oldboy.txt -o              這樣會不會有衝突?

 

#找出文件中的QQ號碼 

[root@oldboyedu41-nb oldboy]# ##找出文件中的QQ號碼
[root@oldboyedu41-nb oldboy]# egrep"[0-9]" oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
not 4900000448.
[root@oldboyedu41-nb oldboy]# egrep"[0-9]{5,}" oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu41-nb oldboy]# egrep"[0-9]{5,}" oldboy.txt -o
49000448
4900000448


#-i 不區分大小寫  aA

#-w 按照單詞進行匹配(全字符精確匹配/完全匹配)

#-n 顯示行號

#-o 顯示grep執行過程  grep正則每次匹配到的內容顯示出來

 

[root@oldboyedu41-nb oldboy]# egrep  '[0-9]{5}' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu41-nb oldboy]# egrep  '[0-9]{5}' oldboy.txt -o
49000
49000
00448

{}小結:

1. a{n,m}     前一個字符連續出現了最少n次,最多出現了m         >=n   <=m

2. a{n,}        前一個字符連續出現了最少n                                          >=n

3. a{n}         前一個字符連續出現了n                                                  ==n

    

1.4.7.5  ?  前一個字符連續出現了0次或1

[root@oldboyedu41-nb oldboy]# egrep"go?d" a.log 
gd   
god
     
[root@oldboyedu41-nb oldboy]# egrep"go*d" a.log 
good
gd   
god
goood


1.4.8 正則表達式總結

     連續出現(重複)

           *        >=0

           +        >=1

           ?        0 1

           {n,m}    >=n  <=m

     其他

           .        任意一個字符

           [abc]       一個整體 相當於是一個字符

                     [a-z] [0-9] [A-Z]

           [^abc]   排除      

            |        或者

           ()       後向引用 反向引用  先保護再使用

           ^

           $

1.4.9 基礎正則與擴展正則區別:

 

支持基礎正則

支持基礎+擴展正則

grep

egrep或者grep -E

sed

sed  -r

awk

 

第2章 練習題

2.1 刪除掉文件中的空行

創建測試環境:

cat >/tmp/blank.txt<<EOF
welcome to oldboy linux.
 
welcome to join us.
 
have fun.
 lidao.oldboyedu.com
 
Dr.Tan 
EOF


 #grep排除  

 grep-v  "^$"      blank.txt

 egrep -v "^$|^ +$"  blank.txt

 egrep -v "^ *$"    blank.txt

 

 ^ *$

 *表示0次的時候就是 ^$

 *表示1次以上的時候就是 ^多個空格$

 

 

 #sed刪除

 sed'找誰幹啥' file

 sed'/^ *$/d' blank.txt    

 

 #awk排除 取反

 awk'/^ *$/' blank.txt

 awk'!/^ *$/' blank.txt

 

2.2 取出eth0網卡的ip地址

2.2.1 方法1awk 3個管道

[root@oldboyedu41-nb oldboy]# ifconfig eth0 |awk'NR==2'
         inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu41-nb oldboy]# ifconfig eth0 |awk'NR==2'|cut -d " " -f12
addr:10.0.0.200
[root@oldboyedu41-nb oldboy]# ifconfig eth0 |awk'NR==2'|awk '{print $2}'
addr:10.0.0.200
[root@oldboyedu41-nb oldboy]# ifconfig eth0 |awk'NR==2'|awk '{print $2}'|awk -F: '{print $2}'
10.0.0.200


2.2.2 方法2awk 2個管道

[root@oldboyedu41-nb oldboy]# ifconfig eth0 |awk'NR==2'
         inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu41-nb oldboy]# ifconfig eth0 |awk'NR==2'|awk -F "addr:" '{print $2}'
10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu41-nb oldboy]# ifconfig eth0 |awk'NR==2'|awk -F "addr:|Bcast" '{print $2}'
10.0.0.200 
 
[root@oldboyedu41-nb oldboy]# ifconfig eth0 |awk'NR==2'|awk -F "addr:|  Bcast"'{print $2}'
10.0.0.200


2.2.3 方法3awk 1個管道

[root@oldboyedu41-nb oldboy]# ifconfig eth0|awk'NR==2{print $2}'
addr:10.0.0.200
[root@oldboyedu41-nb oldboy]# #sed '找誰幹啥'
[root@oldboyedu41-nb oldboy]# #awk '找誰{幹啥}'
[root@oldboyedu41-nb oldboy]# #找誰===條件
[root@oldboyedu41-nb oldboy]# ifconfig eth0|awk'NR==2{print $2}'
addr:10.0.0.200
      
[root@oldboyedu41-nb oldboy]# ifconfig eth0 |awk-F "addr:|  Bcast" 'NR==2{print$2}'
10.0.0.200


2.2.4 方法4awk 1個管道

[root@oldboyedu41-nb oldboy]# ifconfig eth0 |awk-F "[: ]+" 'NR==2{print $4}'
10.0.0.200
 
[root@oldboyedu41-nb oldboy]# echo '#####1@@@@@@2'
#####1@@@@@@2
[root@oldboyedu41-nb oldboy]# echo'#####1@@@@@@2'|egrep "[#@]"
#####1@@@@@@2
[root@oldboyedu41-nb oldboy]# echo'#####1@@@@@@2'|egrep "[#@]" -o 
#
#
#
#
#
@
@
@
@
@
@
[root@oldboyedu41-nb oldboy]# echo'#####1@@@@@@2'|egrep "[#@]" 
[root@oldboyedu41-nb oldboy]# echo'#####1@@@@@@2'|egrep "[#@]" 
#####1@@@@@@2
[root@oldboyedu41-nb oldboy]# echo'#####1@@@@@@2'|egrep "[#@]+" 
#####1@@@@@@2
[root@oldboyedu41-nb oldboy]# echo'#####1@@@@@@2'|egrep "[#@]+" -o
#####
@@@@@@
[root@oldboyedu41-nb oldboy]# echo'#####1@@@@@@2'|awk -F "[@#]+" '{print $2}'
1


2.2.5 方法5grep 正則

[root@oldboyedu41-nb oldboy]# ifconfig eth0 |egrep"[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" 
         inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu41-nb oldboy]# ifconfig eth0 |egrep"[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" -o
10.0.0.200
10.0.0.255
255.255.255.0
[root@oldboyedu41-nb oldboy]# ifconfig eth0 |egrep"[0-9]+\.{3}[0-9]+"  
[root@oldboyedu41-nb oldboy]# ifconfig eth0 |egrep"[0-9]+\.{3}[0-9]+"  
[root@oldboyedu41-nb oldboy]# ifconfig eth0 |egrep"([0-9]+\.){3}[0-9]+"  
         inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu41-nb oldboy]# ifconfig eth0 |egrep"([0-9]+\.){3}[0-9]+"  -o
10.0.0.200
10.0.0.255
255.255.255.0
 
[root@oldboyedu41-1 tmp]# ifconfig eth0 |egrep"([0-9]+\.?){4}" -o |head -1
192.168.56.130


2.3 取出文件的數字權限 644 0644

[root@oldboyedu41-nb oldboy]# stat /etc/hosts 
  File:`/etc/hosts'
  Size: 181         Blocks:8          IO Block: 4096   regular file
Device: 803h/2051d  Inode:260126      Links: 2
Access: (0644/-rw-r--r--) Uid: (    0/    root)  Gid: (    0/    root)
Access: 2017-09-24 00:03:04.019681888 +0800
Modify: 2017-09-10 20:18:34.077204333 +0800
Change: 2017-09-10 20:18:34.096205176 +0800
[root@oldboyedu41-nb oldboy]# stat /etc/hosts |awk-F "[(/]" 'NR==4{print $2 }'
0644


總結:

通配符與特殊符號

       通配符號-找文件名

              {}

              *

       特殊符號

              &&

              >>  

              >

              /

              $

              .

              ..

              ~

              |

              #

              !

              &&

              ||

       單引號,雙引號,不加引號區別

              echo'$LANG $(hostname) {1..5}'

              '' 單引號:所見即所得,吃啥吐啥

              "" 雙引號:具有特殊含義的符號 linux對特殊符號進行了解析 執行

              不加引號:與使用雙引號的時候相同,支持通配符

              `` 反引號 $():運行裏面的命令,把命令顯示出來的東西留下了

 

2.正則根據題目

   排除文件空行

   取出網卡ip地址 grep awk sed(後向引用)

   取出權限       grep awk sed(後向引用)

  

3.第三關練習題

4.linux權限

permission denied


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