6-2 9 sed

9.4/9.5 sed

sed是正則表達式工具之一,很是適合對txt文本行進行調整並輸出正則表達式

語法:

1. sed  '/xxx/'p -n txt 匹配-輸出
2. sed  '/xxx/'d txt    匹配-不輸出
3. sed  ' x,y 'p -n txt 匹配-輸出 			
4. sed s'/xxx/yyy/' txt 替換-輸出 一行一次
5. sed s'/xxx/yyy/' g txt  替換-輸出 一行屢次
6. sed s'/(x)/yyy/' -r txt 替換-輸出 包含正則
7. sed s'/xxx/yyy/' -i txt 替換-修改 謹慎使用
8. sed s'/(x1)(x2)(x3)/\3\2\1/' -r txt 替換-輸出 調換位置
9. sed -e '/xxx/'p -e '1,10'p -n txt 匹配-輸出 屢次匹配

高能用法:

  • /(.*)/#&/
    • 整行匹配,&表示原行,替換效果爲行首加#
  • /xxx//
    • 將xxx替換爲空,效果爲刪除
  • /([^:]+)(:.*:)([^:]+)/\3\2\1/
    • (1)匹配第一個:前的字符串,
    • (2)匹配兩個:及之間的字符串,貪婪匹配讓第二個冒號表示最後一個冒號
    • (3)表示最後一個:後的字符串

舉例:

打印x-y行 sed -n 'x,y'p filebash

[root@axiang-03 ~]# sed -n '3,10'p test.txt  
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
operator:x:11:0:operator:/root:/sbin/nologin

打印有xx的行 sed n '/xx/'p file工具

[root@axiang-03 ~]# sed -n '/root/'p test.txt 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

打印以xx結尾的行 sed n '/xx$/' filecode

[root@axiang-03 ~]# sed -n '/in$/'p test.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

替換xx爲yy sed 's/xx/yy/g' file字符串

[root@axiang-03 ~]# sed 's/olo/nnnnggggg/g' test.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nnnnnggggggin
daemon:x:2:2:daemon:/sbin:/sbin/nnnnnggggggin
adm:x:3:4:adm:/var/adm:/sbin/nnnnnggggggin

刪除xx sed 's/xx//g' filetest

[root@axiang-03 ~]# sed 's/[0-9a-r]//g' test.txt | sed -n '6,7'p 
sy:x:::sy:/s://sy
sutw:x:::sutw:/s:/s/sutw

調換行內第一個xx和最後一個yy sed -r 's/(xx)(.*)(yy)/\3\2\1/' filesed

[root@axiang-03 ~]# sed -r 's/(root)(.*)(bash)/\3\2\1/' test.txt |sed -n '1'p 
bash:x:0:0:root:/root:/bin/root

行首加入xx sed 's/^.*$/xx&/' filefile

[root@axiang-03 ~]# sed 's/^.*$/666&/' test.txt  行首加字符 不須要g 
666root:x:0:0:root:/root:/bin/bash
666bin:x:1:1:bin:/bin:/sbin/nologin

第一組數字和最後一組英文字符調換位置語法

[root@axiang-03 ~]# cat 2.txt  
111eoajfe eoxiua eown  aaa
efae 222 wonf ;fafpeona bbb 323
!#werw@$333weronoanfe$@#%ccc@!#342 
[root@axiang-03 ~]# sed -r 's/([0-9]+)(.*[^a-zA-Z])([a-zA-Z]+)/\3\2\1/' 2.txt 
aaaeoajfe eoxiua eown  111
efae bbb wonf ;fafpeona 222 323
!#werw@$cccweronoanfe$@#%333@!#342
解釋:貪婪匹配,保證最後條件匹配成功且最小匹配。這裏若是沒有中止條件,只會留給最後條件一個字符
第一個數移動到行尾
[root@axiang-03 ~]# sed -r 's/([0-9]+)(.*)/\2\1/' test.txt

場景舉例,轉變電話號格式英文

root@lixiang01:~# cat distros.txt
Ubuntu     8.04    04/24/2008 
Fedora     8      11/08/2007 
Ubuntu     6.10    10/26/2006 
root@lixiang01:~# sed -r 's/([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/\3-\1-\2/' distros.txt 或者加入-r選項,可是匹配文本中的「/」依然須要轉義
Ubuntu     8.04    2008-04-24
Fedora     8      2007-11-08
Ubuntu     6.10    2006-10-26
相關文章
相關標籤/搜索