日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > 服務(wù)器 > linux shell篇(五)正則表達式

linux shell篇(五)正則表達式

來源:程序員人生   發(fā)布時間:2016-07-13 08:45:04 閱讀次數(shù):3162次
1.正則表達式:


   
正則表達式    RE  、  Regular Expression
     是1種字符模式,是在匹配文本時,使用1些特殊符號,匹配到用戶想要的東西


字符模式:
    普通字符:沒有任何特殊含義的字符
    元字符:具有特殊含義的字符    ^  $  *  .   []  ()  {} 
    
正則表達式1般是夾在雙斜線之間的   如:/^abc/等
介紹正則表達式元字符
元字符          功能                             例子                匹配結(jié)果
^            行首定位符                       /^root/             匹配以root開頭的行
$            行尾定位符                          /sh$/              匹配以sh結(jié)尾的行
.       匹配任意單個字符(除換行符)      /l.ve/             匹配live、love、... ...
*       前導符
        匹配0個或多個它前面的模式      /l*ve/             匹配ve、lve、llve、... ...
.*      匹配0到多個任意字符                  
[]      匹配1組字符中的任意1個          /l[ioIO]ve/       匹配live、love、lIve、lOve
[x-y]  匹配1段范圍中的任意1個         /l[o-z]ve/          匹配love、lpve、lqve、... ...、lzve
        [0⑼]           數(shù)字
        [a-z]           小寫字母 
        [A-Z]           大寫字母
        [a-z0⑼]        小寫字母或數(shù)字
        [-+*/]           +-*/ 4則運算
        [a-Z]             字母
[^]    表示取反                              /^[^abc]ve/           匹配除ave、bve、cve之外的3個字符的字符串
        [^0⑼]     不是數(shù)字
\       用于轉(zhuǎn)義元字符的                  /93\.4/                匹配93.4
\<     詞首定位符                          /\<bin/                 匹配bin、binary、... ...                 
\>      詞尾定位符                         /sh\>/                  匹配bash、csh、ksh、... ...


rootfs
模式的重復(fù){}
    x\{m\}              x是字符或字符串,m是數(shù)字,表示次數(shù)
                匹配x出現(xiàn)m次            /a\{3\}/         匹配到aaa
    x\{m,\}         匹配x出現(xiàn)最少m次       /a\{3,\}/       匹配aaa、aaaa、aaaaaaaa、aaaaaaa、... ...
    x\{m,n\}        匹配x出現(xiàn)m次到n次     /a\{3,5\}/     匹配aaa、aaaa、aaaaa


(root)
(a+(b-c)*d)
\(...\)     分組、標簽 
& \1 \2
/\(love\)/ \1r  
     \(root\).*\(bin\).*\2\1                        \1ly   
     
            a  and b
            \(a\) and \(b\)    ==> \2 and \1           
     
 2.正則表達式用法
(1).vim與正則表達式
1、查找替換(letter)       tom換成mary
~# vim letter
:%s/\<[Tt]om\>/mary/       ——>    tom  Tom


2、行首行尾    picnic
/^love
/love$

3、任意字符    picnic
/l.ve

4、前導符   picnic
/o*v 

5、范圍   picnic                                                                 
/love[a-z]

6、取反    picnic
/love[^a-z]

7、綜合      invite
/^[A-Z]..$            匹配Dan這1行
/^[A-Z][a-z]*.*3[0⑸]   匹配到There are around 30 to 35    
//由此可以看出,正則表達式履行的是最大匹配

8、標簽                
  :%s/\(Ginger\) and \(Larry\)/\2 and \1/  
  
  :%s/\(Ginger\)\(.*\)\(Larry\)/\3\2\1/
  
  s@@@    s###   s%%%   s///   等價的
  
(2).grep與正則表達式
GREP —— Global Regular Expression Print     
    好處:非交互
    
    不影響原文件內(nèi)容,目的就是過濾出用戶感興趣的內(nèi)容
    
命令格式
grep [選項] "正則表達式" 文件列表

grep履行狀態(tài)返回值3種
0:該文件中搜索到了匹配行
1:該文件中未搜索到匹配行
2: 搜索的文件不存在
~# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
~# echo $?
0
~# grep "roooot" /etc/passwd
~# echo $?
1
~# grep "root" /etc/passwd1
grep: /etc/passwd1: No such file or directory
~# echo $?
2


grep基本使用
設(shè)定別名
#alias grep='grep --color=auto'
# vim /etc/bashrc 


1、--color    帶色彩顯示匹配到的關(guān)鍵字
~# grep --color "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
2、-i   疏忽大小寫
~# cat pass 
Root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
~# grep "root" pass --color
Root:x:0:0:root:/root:/bin/bash
~# grep -i "root" pass --color
Root:x:0:0:root:/root:/bin/bash
3、-v   取反
~# grep -v "nologin" /etc/passwd    //打印不包括nologin的行
4、^
打印/root/.bashrc文件中的注釋行    
~# grep ^# /root/.bashrc
打印/etc/inittab文件中的非注釋行 
~# grep -v ^# /etc/inittab 
id:5:initdefault:
5、$
顯示passwd文件中以bash結(jié)尾的行
~# grep bash$ /etc/passwd
6、^$     空行
~# grep -v ^$ /etc/rc.local
7、-c   count   統(tǒng)計匹配到的行數(shù)
  統(tǒng)計非空行的數(shù)量
~# grep -cv ^$ /etc/rc.local  
7
  統(tǒng)計空行的數(shù)量
~# grep -c ^$ /etc/rc.local  
1        
8、-r      遞歸檢索    

9、-l       1般與-r聯(lián)用,只文顯示包括關(guān)鍵字的件名,而不是顯示文件內(nèi)容
~# grep -rl "if" /script/       
/script/adduser1.sh
/script/if7.sh
/script/for9.sh
/script/fuwu.sh
/script/if1.sh
10、-q      quiet    靜默輸出    1般在寫腳本時候用
~# grep -q root /etc/passwd 
~# echo $?
0
11、-n   顯示匹配行的行號
~# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin
 
其他選項
-A
-B
-C     
    
練習:
1、顯示/etc/group文件中含有root的行
grep root /etc/group
2、顯示/etc/passwd中以rp開頭的行
grep ^rp /etc/passwd
3、顯示/etc/group中不以:結(jié)尾的行
grep -v :$ /etc/group
4、顯示/etc/rc.local的空行及其行號
grep -n ^$ /etc/rc.local
5、顯示僅/mnt/cdrom目錄下的文件類型為目錄的文件(不使用find)
ll /mnt/cdrom | grep ^d

grep 支持的正則元字符
^  $  .   *   []    [^]   \<    \>      \{\}     \(\)
 
~# vim example1.txt
asdf
ad
bsd
nsd
a.d
5.6
b.c
bcc
aff
~# grep a.d example1.txt 
asdf
a.d
~# grep "a\.d" example1.txt 
a.d
~# grep a*d example1.txt
asdf
ad
bsd
nsd
a.d
練習:/etc/passwd文件
1、匹配第2個字符是a的行
~# grep --color ^.a /etc/passwd
2、查找出/usr/bin目錄下具有suid權(quán)限的文件(不使用find)
~# ll /usr/bin/ | grep ^...[sS] --color
3、找出uid是兩位數(shù)的行
[0⑼][0⑼]
~# grep --color x:[0⑼][0⑼]: /etc/passwd
~# grep --color :[0⑼][0⑼]:[0⑼] /etc/passwd    
4、顯示passwd文件中含有兩個bin的行
bin.*bin
~# grep --color "bin.*bin" /etc/passwd
~# grep --color "\<bin.*\<bin" /etc/passwd   //僅僅是bin
bin:x:1:1:bin:/bin:/sbin/nologin
5、顯示passwd文件中含有3個root的行
~# grep "\(root\).*\1.*\1" /etc/passwd --color
root:x:0:0:root:/root:/bin/bash
6、顯示passwd文件中有9個連續(xù)的小寫字母的行
[a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z]
[a-z]\{9\}
~# grep "[a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z]" /etc/passwd --color
~# grep "[a-z]\{9\}" /etc/passwd --color

  ~# vim e2.txt     
aabbcc
aaabbbccc
aaaannnmms
@@@##$
@@##@@
$$@#$%
  1、找出e2.txt文件中含有3個連續(xù)的相同字符的行
~# grep "\(.\)\1\1" e2.txt --color
aaabbbccc
aaaannnmms
@@@##$

POSIX表示法
Portable Operating System Interface   ——  可移植操作系統(tǒng)接口

也是適用于非英文環(huán)境的系統(tǒng),即適用于所有的語言環(huán)境


括號類                  含義                                                 匹配范圍
[:space:]       包括換行符、空格、tab等所有空白字符
[:blank:]        空格和制表符                                             空格和tab
[:alpha:]         字母                                                         a-zA-Z
[:alnum:]       字母和數(shù)字                                                 a-Z0⑼
[:cntrl:]           控制字符                                                ctrl、backspace等等
[:lower:]          小寫字母                                                 a-z
[:upper:]           大寫字母                                                A-Z
[:digit:]             10進制數(shù)                                              0⑼
[:xdigit:]           106進制數(shù)                                             0⑼a-fA-F
[:punct:]           標點符號                                               ,.?:' "


[^[:alpha:]]       取反,表示不是字母


~# grep "[[:space:]]\.[[:digit:]][[:space:]]" datafile --color
southwest SW Lewis Dalsass 2.7 .8 218
southeast SE Patricia Hemenway 4.0 .7 417


|       或
?       表示0個或1個它前面的字符         a?d    ==>    d   ad
+      表示1個或多個它前面的字符        a+d    ==>   ad  aad  aaad ... ...
()
x{m}
x{m,}
x{m,n}


|
顯示datafile文件中含有NW或是WE的行
~# egrep "NW|WE" datafile --color
~# grep -E "NW|WE" datafile --color



~# egrep "2\.?[0⑼]" datafile --color

+  
~# egrep "a+" e2.txt --color
aabbcc
aaabbbccc
aaaannnmms       
3.sed
sed     流編輯器    stream editor
是1種非交互式文本編輯器,默許是不會修改原文件的

工作原理
 1行1行處理的
 從文件的第1行開始讀取,放到模式空間中進行相應(yīng)處理,處理完將結(jié)果輸出到屏幕上,然后繼續(xù)讀取下1行,直到所有的行都處理終了,sed結(jié)束。
 sed1般用于處理大文件。
    
語法:
sed [選項] 'AddressCommand'  文件列表

1、經(jīng)常使用的選項
-n:靜默輸出,關(guān)閉模式空間的輸出,1般與p1起用
-e:允許進行多項編輯,也就是說對同1行做屢次處理、也能夠做多點編輯  
-e '動作' -e '動作'   等價于  '動作1;動作2'
-f sed腳本 : 指定運行的sed腳本的
-r:允許使用擴大正則
-i:直接修改原文件
  2、Address :  定址、地址
1)單獨的行號
如:  1   就表示要處理第1行
$   表示最后1行
2)起始行,結(jié)束行
如:  1,5         處理第1行到第5行
3)/正則表達式/
如:/^root/     處理以root開頭的行
4)/正則表達式1/,/正則表達式2/        最小匹配
表示處理從匹配到正則表達式1的行開始,到第1次匹配到正則表達式2之間的所有行
如果正則表達式1匹配到了,正則表達式2未匹配到,那末就從匹配到正則表達式1的行開始,1直處理到文件結(jié)束
如果正則表達式1未匹配到,那末就不對文件做處理。            
  如:/^bin/,/bash$/    
binsdadaddaddass
dsfasidsfdhfj09bash
dasdasdasdf--bash
5)起始位置,+N     不是特別經(jīng)常使用
表示從起始位置開始,后面的N行都處理
如:3,+5       處理3⑻行            
3、Command      
經(jīng)常使用的:d   p   s   y   q
其他的:a   c   i   r   w
h   H   g   G

1)d:刪除
~# sed '/UUID/d' /etc/fstab    
~# sed '1,5d' /etc/fstab
~# sed '$d' /etc/fstab
~# sed '/tmp/,/sfs/d' /etc/fstab
~# sed '/UUID/,+5d' /etc/fstab 
刪除從第5行開始到最后1行的所有內(nèi)容
~# sed '5,$d' /etc/passwd
2)p:打印
  ~# cat -n /etc/passwd | head > pass
  ~# sed 'p' pass    //每行會打印兩遍,1遍是處理結(jié)果,1遍是模式空間的輸出
  ~# sed -n 'p' pass      //只會打印1遍,由于模式空間的輸出被關(guān)閉了
  ~# sed -n '3,5p' pass   // 打印文件的3到5行
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin     
 ~# sed -n '3p' pass
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
 
! 非
~# sed '3!d' pass     //等價于打印第3行
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
練習:
用sed分別實現(xiàn)head ⑴ 和 tail ⑴的功能
head ⑴
~# sed -n '1p' pass
1 root:x:0:0:root:/root:/bin/bash
~# sed '1!d' pass
1 root:x:0:0:root:/root:/bin/bash

tail ⑴
~# sed -n '$p' pass
10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
~# sed '$!d' pass
10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
 
3)r   讀取
~# sed '/^root/r /etc/issue' /etc/passwd
 1 root:x:0:0:root:/root:/bin/bash
Red Hat Enterprise Linux Server release 6.4 (Santiago)
Kernel \r on an \m


2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
4)w 寫
~# sed '/root/w /tmp/douni' pass  //將匹配到的行另存到文件中
~# cat /tmp/douni      
1 root:x:0:0:root:/root:/bin/bash   
5)a   追加   在匹配到的行的下1行插入內(nèi)容
~# sed '/root/a hello root' pass | head ⑸
1 root:x:0:0:root:/root:/bin/bash
hello root
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
在文件的最后1行插入新內(nèi)容
~# sed '$a The End' pass 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
The End
6)i  插入     在匹配行的上1行插入內(nèi)容
~# sed '/daemon/i SO COOL' pass | head ⑸
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
SO COOL
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
~# sed '1i BEGINNING' pass  | head ⑸   //在第1行插入內(nèi)容
BEGINNING
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
7)c  修改       本行替換,將匹配到的行的內(nèi)容替換成新內(nèi)容
~# sed '/root/c ROOT' pass    
    1  ROOT
ROOT:x:0:0:root
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
~# sed '/IPADDR/c IPADDR=172.16.254.201' /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=172.16.254.201
NETMASK=255.255.0.0
GATEWAY=172.16.254.1  
8)y      轉(zhuǎn)換的命令,對應(yīng)替換
  y///
  y/123/ABC/   
  ~# sed 'y/1234/ABCF/' pass
A root:x:0:0:root:/root:/bin/bash
B bin:x:A:A:bin:/bin:/sbin/nologin
C daemon:x:B:B:daemon:/sbin:/sbin/nologin
F adm:x:C:F:adm:/var/adm:/sbin/nologin
5 lp:x:F:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:AB:mail:/var/spool/mail:/sbin/nologin
A0 uucp:x:A0:AF:uucp:/var/spool/uucp:/sbin/nologin
 將文件中所有的小寫字母轉(zhuǎn)換成大寫字母
~# sed 'y/qwertyuiopasdfghjklzxcvbnm/QWERTYUIOPASDFGHJKLZXCVBNM/' pass 
  9)n     next     處理匹配行的下1行,用的較少
~# sed -n '/root/p' pass
1 root:x:0:0:root:/root:/bin/bash
~# sed -n '/root/{n;p}' pass    //{}里面寫多個命令,之間用分號分隔
2 bin:x:1:1:bin:/bin:/sbin/nologin
  10)q   退出       不再向模式空間讀入新行
~# sed '/^bin/q' /etc/passwd   
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
~# sed '1q' pass    //head ⑴的又1種方法
1 root:x:0:0:root:/root:/bin/bash
練習:
1、將pass文件每行打印3次
~# sed 'p;p' pass                
2、打印passwd文件的第1行和第3行(多點編輯,用分號分隔命令)
~# sed -n '1p;3p' pass 
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
~# sed -n -e '1p' -e '3p' pass
3、使用sed修改selinux的模式為permissive
~# sed '7c SELINUX=permissive' /etc/selinux/config
4、使用sed永久修改主機名為shell
~# sed '$c HOSTNAME=shell' /etc/sysconfig/network
3、刪除pass文件的第1行和最后1行
~# sed '1d;$d' pass
以下操作datafile文件 
4、在匹配到Lewis的行的下1行插入“has Lewis”
~# sed '/Lewis/a has Lewis' datafile
5、在文件的第1行插入“employee's information” 
~# sed "1i employee's information" datafile
11)s   查找替換
定址s/模式匹配(舊的內(nèi)容)/新的內(nèi)容/[修飾符]
s@@@    s###  s%%%
修飾符:
g:全局替換,1行中的多個
n:n為數(shù)字,1⑸12     替換第n個匹配到的內(nèi)容
p:打印
w:另存為,寫
~# sed 's/root/ROOT/' pass | head ⑶      //默許只替換第1次匹配到的
1 ROOT:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
~# sed 's/root/ROOT/2' pass | head ⑶    //替換每行中第2個匹配到的
1 root:x:0:0:ROOT:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
~# sed 's/root/ROOT/g' pass | head ⑶    //全部替換
1 ROOT:x:0:0:ROOT:/ROOT:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
  練習:
1、從以root開頭,到以login結(jié)尾的行,將sbin替換成bin (/etc/passwd)
~# sed '/^root/,/login$/s/sbin/bin/' /etc/passwd | head

2、將格式為2015/09/02的日期,替換為2015; 09; 02的格式(注意分號后面有空格)
~# date "+%Y/%m/%d"
2015/09/02
~# date "+%Y/%m/%d" | sed 's#/#; #g'
2015; 09; 02
~# date "+%Y/%m/%d" | sed 's/\//; /g'
3、將selinux配置文件中的disabled替換為enforcing,暫時不作用于原文件
~# sed '/SELINUX/s/disabled/enforcing/' /etc/selinux/config

思考題:刪除文件中所有的數(shù)字     ****                 //1種思想,用替換去刪除字符等
~# sed 's/[0⑼]//g' pass               
  
  -i:直接作用于文件
~# sed 's/static/dhcp/' /etc/sysconfig/network-scripts/ifcfg-eth0
~# sed -i 's/static/dhcp/' /etc/sysconfig/network-scripts/ifcfg-eth0
~# sed -i.bak 's/dhcp/static/' /etc/sysconfig/network-scripts/ifcfg-eth0 
//.bak是備份文件的后綴名
~# ls /etc/sysconfig/network-scripts/ifcfg-eth0*
ifcfg-eth0      ifcfg-eth0.bak 


模式匹配時的特殊符號
^:每行的開頭
給全文加注釋
~# sed 's/^/#/' pass
在第8到10行的開頭每行加上###
~# sed 's/^/###/' pass
$:每行的結(jié)尾
在匹配到root的行的末尾添加###    
~# sed '/root/s/$/###/' pass
1 root:x:0:0:root:/root:/bin/bash###


-r選項: 支持擴大正則
 ~# sed -r 's/[[:space:]]+//' pass     
 ~# sed 's/[[:space:]]*//' pass
 
 1、將history命令履行結(jié)果中編號前面的空白字符刪掉
~# history | sed -r 's/[[:space:]]+//'
 2、刪除文件中的空行和空白行
~# cat txt 
adadadadada     dasdasdadas


 
dadada   
 
gdfgdgdfgfdg
  ~# cat -A txt
adadadadada     dasdasdadas$
$
 $
dadada   $
^I^I $
gdfgdgdfgfdg$
  ~# sed -r '/^$/d;/^[[:space:]]+$/d' txt
adadadadada     dasdasdadas
dadada   
gdfgdgdfgfdg
&      援用      用來代替匹配到的模式的
將每行的行號加上括號
~# sed -r 's/[0⑼]+/(&)/' pass

~# vim test
hello, i like you
hi, my love
like ==> liker
love ==> lover
~# sed 's/l..e/l..er/' test 
hello, i liker you
hi, my lover
~# sed -r 's/(l..e)/\1r/' test 
hello, i liker you
hi, my lover

like ==> Like
love ==> Love
~# sed -r 's/l(..e)/L\1/' test 
hello, i Like you
hi, my Love
練習:
1、刪除每行的第1個字符
2、刪除每行的第2個字符
3、刪除每行的倒數(shù)第1個字符
4、刪除每行的倒數(shù)第2個字符
5、交換每行的第1個和第2個字符

  思考:
刪除/etc/passwd每行的第1個字段
交換/etc/passwd文件的第1個和第2個字段

 作業(yè):
  1、將/etc/inittab文件中的id:5:initdefault中的5替換成3
以下使用datafile3
  1、將Jon的名字改成Jonathan
  2、刪除文件的前3行
  3、打印文件的第5到10行
  4、刪除含有Lane的行
  5、打印生日在11月和12月的行
  6、在以Fred開頭的行末尾添加3個*
  7、將所有包括Jose的行替換為Match Jose
  8、把Popeye的生日改成11/14/46,條件:需要你先匹配誕生日
  9、刪除所有的行
  10、將文件中的所有大寫字母用括號()括起來      




每多少行操作1次
first~step
first:起始行號
step:步長
 打印偶數(shù)行
~# sed -n '2~2p' pass
2 bin:x:1:1:bin:/bin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
8 halt:x:7:0:halt:/sbin:/sbin/halt
10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
  每3行打印1次
~# sed -n '1~3p' pass 
1 root:x:0:0:root:/root:/bin/bash
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin


=:打印當前行號
統(tǒng)計文件的行數(shù)
  ~# sed -n '$=' /etc/passwd
76

~# vim sc1.sed
/Lewis/a \
 hello everyone \
 ni hao
/Suan/c has suan
1i \
************** \
begin \
**************
$d


調(diào)用腳本
~# sed -f sc1.sed datafile
************** 
begin 
**************
northwest NW   Charles Main 3.0 .98 334
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass 2.7 .8 218
 hello everyone 
 ni hao
has suan
southeast SE Patricia Hemenway 4.0 .7 417
eastern EA TB Savage 4.4 .84 520
northeast NE AM Main Jr. 5.1 .94 313
western WE Sharon Gray 5.3 .97 5 23
north NO Margot Weber 4.5 .89 59
模式空間
用于處理文本行的
PATT,最多能夠存儲8192字節(jié)

保存空間
用于保存文本行的
HOLD,sed用來保存已處理過的文本行的,最多保存8192字節(jié),默許有1個空行

觸及到的命令
h:將模式空間的內(nèi)容復(fù)制到保存空間   ——  覆蓋模式
H:將模式空間的內(nèi)容追加到保存空間  —— 追加模式
g:將保存空間的內(nèi)容復(fù)制到模式空間  ——  覆蓋模式
G:將保存空間的內(nèi)容追加到模式空間  ——  追加模式

x:將模式空間的內(nèi)容和保存空間的內(nèi)容進行交換

交換第1行和第2行的內(nèi)容
~# sed '1{h;d};2G' pass | head ⑸
2 bin:x:1:1:bin:/bin:/sbin/nologin
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
將第1行到第3行的內(nèi)容復(fù)制到第4行后面
~# sed '1h;2,3H;4G' pass  | head 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
將第1行到第3行的內(nèi)容剪切到第4行的后面
~# sed '1{h;d};2,3{H;d};4G' pass  
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
在每行的下面添加1個空行
~# sed 'G' pass


思考:倒序輸出文件的每行
假定文件以下:
aa
bb
cc
dd
要求輸出結(jié)果以下:
  dd
  cc
  bb
  aa

4.awk
awk     1種編程語言、文本編輯器、也是1種非交互式的編輯器


功能:對文本數(shù)據(jù)進行匯總和處理,是1個報告的生成器,能夠?qū)?shù)據(jù)進行排版


awk        nawk        gawk       posix awk
nawk   ——  solaris
gawk,awk   ——   GNU Linux
 
工作進程
將文件中的內(nèi)容逐行的進行掃描,把整行內(nèi)容存入內(nèi)置變量$0中;
再依照指定的分隔符(默許的分隔符是空白)將輸入行切成若干個列(字段),存入變量$1~$100,再使用命令(print、printf)將變量打印輸出,輸出分隔符默許也是空白
再讀取下1行,循環(huán)處理,直到文件處理結(jié)束。

~# ifconfig eth0 | grep Bcast | awk '{print $2}' | awk -F: '{print $2}'
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 在线婷婷| 高清一区二区三区四区 | 久久99九九 | 亚洲性激情 | 久久久久国产精品午夜一区 | 日韩色网 | 欧美精品黑人猛交高潮 | 国产在线成人 | 国产日韩一区二区三区 | 在线视频91| 日韩一区二区三区视频 | 一级片在线播放 | 成人影音 | 91午夜在线 | 日韩欧美精品一区二区 | 精品久久中文 | 性欧美精品 | 中文天堂视频在线 | 午夜视频免费在线观看 | 成人精品视频在线观看 | 亚洲欧洲精品成人久久奇米网 | 美女被免费喷白浆视频 | 中文一区 | 久久久久成人精品 | 免费在线成人av | 青青草av| a天堂在线| a级毛片在线免费 | 波多野结衣精品视频 | 亚洲色图16p| xxxx性欧美| 91久久久久久久一区二区 | www.色com情11| 久久一本到 | 久久亚洲二区 | 国产精品资源 | 黄免费 | 久久久久久国产一区二区三区 | 国产伦精品一区二区三区视频金莲 | 亚洲精品一二 | 午夜在线免费观看 |