sed介紹

sed

  • -n 顯示匹配的行
  • -e選項容許在同一行裏執行多條命令
  • p打印行
  • Ip不區分大小寫
  • d刪除
  • s///g  查找替換

sed -n '/a/'p 2.txt  -n只顯示匹配的行,'/a/' 匹配內容 p打印linux

[root@glinux-01 ~]# cat 2.txt
aaaa
bbbb
AAAA
avavav
123
445ff
[root@glinux-01 ~]# sed -n '/aa/'p 2.txt 
aaaa
[root@glinux-01 ~]# sed -n '/a/'p 2.txt 
aaaa
avavav
[root@glinux-01 ~]# sed -n '/aa*/'p 2.txt 
aaaa
avavav
[root@glinux-01 ~]# sed -n '/aa?/'p 2.txt 
[root@glinux-01 ~]# sed -n '/a.a/'p 2.txt 
aaaa
avavav

打印指定行bash

[root@glinux-01 ~]# sed -n '2,3'p 2.txt
bbbb
AAAA
[root@glinux-01 ~]# sed -n '2,$'p 2.txt  //打印2到最後一行
bbbb
AAAA
avavav
123
445ff

 打印某行到某行之間全部行spa

[root@glinux-01 ~]# sed -n '/ert/,/123/'p lx1.txt
ert
fff
**
[abcfd]
123

-e :選項容許在同一行裏執行多條命令code

[root@glinux-01 ~]# sed -n -e '2'p -e '3'p 2.txt 
bbbb
AAAA

I 不區分大小寫字符串

[root@glinux-01 ~]# sed -n '/a/'Ip 2.txt
aaaa
AAAA
avavav

d 刪除指定行,並將剩餘行顯示出來(只是屏幕上刪除,文件內容並未刪除,若是想刪除文件加- i)dva

[root@glinux-01 ~]# sed  '1,3'd 2.txt
avavav
123
445ff
[root@glinux-01 ~]# cat 2.txt
aaaa
bbbb
AAAA
avavav
123
445ff

s///g 查找替換()擴展

[root@glinux-01 ~]# sed  '1,$s/a/A/g' 2.txt//從第一行到最後一行替換a爲A
AAAA
bbbb
AAAA
AvAvAv
123
445ff

 不加g表明只替換每行第一個a換成d 。加g表明替換每行中全部a換成dsed

[root@glinux-01 ~]# sed  's/a/d/g' 2.txt
dddd
bbbb
AAAA
dvdvdv
123
445ff
[root@glinux-01 ~]# sed  's/a/d/' 2.txt
daaa
bbbb
AAAA
dvavav
123
445ff

 不用-r的話, | & + (){}要轉義的file

不用-r的話, | & + 要轉義的
[root@glinux-01 ~]# sed -r  '1,6s/a+/c/g' 2.txt
c
bbbb
AAAA
cvcvcv
123
445ff

 s///g 中,/能夠用@#替換,方法

[root@glinux-01 ~]# sed 's//b/c/g' 2.txt
sed:-e 表達式 #1,字符 6:「s」的未知選項
[root@glinux-01 ~]# sed 's/\/b/c/g' 2.txt
aaaa
cbbb
AAAA
avavav
123
445ff
[root@glinux-01 ~]# sed 's@/b@c@g' 2.txt
aaaa
cbbb
AAAA
avavav
123
445ff

sed 擴展

將每行前加上aaa:   (.*)匹配全部 替換爲aaa:\1 (\1表明匹配出的第一個字符或用&)

注意:\1 只能匹配前面帶()的內容

[root@glinux-01 ~]# sed -r 's/(.*)/aaa:\1/' 2.txt
aaa:aaaa
aaa:/bbbb
aaa:AAAA
aaa:avavav
aaa:123
aaa:445ff

首列和尾列替換s/([^:]+)(.*:)([^:]+)/\3\2\1/

([^:]+)匹配非:開頭內容     root                           對應/1

(.*:)匹配以:結尾的內容   :x:0:0:root:/root:         對應/2

([^:]+)匹配非:開頭內容    /bin/bash                  對應/3

符合匹配規則的內容,在下一次匹配時就不在匹配範圍內了

[root@glinux-01 ~]# head pw.txt|sed -r 's/([^:]+)(.*:)([^:]+)/\3\2\1/'
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:11:0:operator:/root:operator
[root@glinux-01 ~]# head pw.txt
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
operator:x:11:0:operator:/root:/sbin/nologin

sed中,

  • \u表示大寫,
  • \l表示小寫
  • \w 表示用於匹配字母,數字或下劃線字符
  • \b 界線符: 元字符一般用於查找位於單詞的開頭或結尾的匹配


1. 把每一個單詞的第一個小寫字母變大寫:(&表示前面匹配的內容)
sed 's/\b[a-z]/\u&/g' filename

2. 把全部小寫變大寫:
sed 's/[a-z]/\u&/g' filename

3. 大寫變小寫:
sed 's/[A-Z]/\l&/g' filename

4. /b例子:

/\bm/ 匹配 "moon" 中的 'm';
/oo\b/ 不匹配 "moon" 中的 'oo',由於 'oo' 後面的 'n' 是一個單詞字符;
/oon\b/ 匹配 "moon" 中的 'oon',由於 'oon' 位於字符串的末端,後面沒有單詞字符;
/\w\b\w/ 不匹配任何字符,由於單詞字符以後毫不會同時緊跟着非單詞字符和單詞字符。

5 sed在文件中某一行最後添加一個數字

[root@g_linux01 ~]# sed 's/^e.*/& 12/' lx1.txt //匹配以e開頭的詞,並在其後加 12
ert 12
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf
[]
____
!@#
eq 12
qe
er 12
方法2:
[root@g_linux01 ~]# sed '/^e/s/$/ 12/' lx1.txt //匹配以e開頭的詞,在末尾添加 12 (^表示在開頭$末尾)
ert 12
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf
[]
____
!@#
eq 12
qe
er 12

打印1到100行包含某個字符串的行

sed  -n '1,100{/abc/p}'  1.txt
相關文章
相關標籤/搜索