天天看點

sed用法

查找資料

1、-n:加上-n後,sed才會被處理;不加則全部列印

[root@test ~]# sed -n  '/root/'p /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

dockerroot:x:498:498:Docker User:/var/lib/docker:/sbin/nologin

[root@test ~]# sed -n  '/^root/'p /etc/passwd

2、列印出第一,二行

[root@test ~]# sed -n '1,2'p /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin

列印最後一行

[root@test ~]# sed -n '$'p /etc/passwd

3、支援通配符

[root@test ~]# sed -n '/^t*t/p' /etc/passwd 

tcpdump:x:72:72::/:/sbin/nologin

test:x:507:111::/home/test:/bin/bash

test1:x:509:111::/home/test1:/bin/bash

4、-e:多點編輯

删除資料:

1、将含有root的行都删除

[root@test ~]# sed '/root/'d /etc/passwd

2、删除第2行到最後一行

[root@test ~]# sed '2,$'d /etc/passwd

3、删除test行,直到最後一行

[root@test ~]# sed '/test/,$'d /etc/passwd

更改資料:

-i:表示執行

1、将test更改為test-gz

[root@test ~]# sed -n 's#test#test-gz#g'p passwd 

test-gz:x:507:111::/home/test-gz:/bin/bash

test-gz1:x:509:111::/home/test-gz1:/bin/bash

gztest-gz:x:555:111::/home/zg/:/bin/bash

2、将0-9的删除

[root@test ~]# sed 's#[0-9]##g' passwd 

[root@test ~]# sed 's/[a-zA-Z]//g' test.txt

3、

[root@test jpg]# ls *|sed -r 's#(^.*)_test.*#mv & \1.txt#g'

mv 1_test.txt 1.txt

mv 2_test.txt 2.txt

mv 3_test.txt 3.txt

mv 4_test.txt 4.txt

mv 5_test.txt 5.txt

[root@test jpg]# ls *|sed -r 's#(^.*)_test.*#mv & \1.txt#g'|bash

增加資料:

a 追加文本到指定行後

i 插入文本到指定行前

資料準備:

[root@test ~]# cat 1.txt 

101 zhang 

102 wo

103 yu

104 sl

105 yn

[root@test ~]# sed '2a 102 test' 1.txt 

102 test

[root@test ~]# sed '2i 102 test' 1.txt 

例子:調換2個字元串的位置

sed 's#\(zabbix\)\(.*\)\(nologin\)#\3\2\1#g' passwd 

nologin:x:996:994:Zabbix Monitoring System:/var/lib/zabbix:/sbin/zabbix

()作為一個整體,()在sed中為特殊字元,需要用 \ 脫意

以任意字元開頭的,在前面都加上123;&表示前面的内容

sed 's#^.*$#123&#g' passwd

123virftp:x:1002:1002::/home/virftp:/sbin/nologin

123pure-ftp:x:1010:1010::/home/pure-ftp:/bin/bash

123zabbix:x:996:994:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin

123roooooooooot

123rooodt

本文轉自 jiekegz  51CTO部落格,原文連結:http://blog.51cto.com/jacksoner/1979372