linux中sed用法 正则,Linux正则表达式sed相关用法介绍

1. 打印:p参数

[root@localhost tmp]# cat -n ./passwd

1  root:x:0:0:jamm:/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  news:x:9:13:news:/etc/news:

11  uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

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

13  games:x:12:100:games:/usr/games:/sbin/nologin

14  gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

15  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

16  nobody:x:99:99:Nobody:/:/sbin/nologin

17  mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin

18  smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin

19  nscd:x:28:28:NSCD Daemon:/:/sbin/nologin

20  vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

21  rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin

22  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

23  rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

24  nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

25  pcap:x:77:77::/var/arpwatch:/sbin/nologin

26  ntp:x:38:38::/etc/ntp:/sbin/nologin

27  dbus:x:81:81:System message bus:/:/sbin/nologin

28  haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

29  avahi:x:70:70:Avahi daemon:/:/sbin/nologin

30  avahi-autoipd:x:100:101:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin

31  xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin

32  gdm:x:42:42::/var/gdm:/sbin/nologin

33  jamm:x:500:500::/home/jamm:/bin/bash

34  dao:x:501:501::/home/dao:/bin/bash

而经过p参数之后打印出来的只有包含root的行

[root@localhost tmp]# sed -n '/root/p' passwd

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

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

这个就是p参数的用途,只要是打印

2.删除:d

下面的示例以passwd文件的前五行为例:

[root@localhost tmp]# cat -n passwd

1  root:x:0:0:jamm:/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

[root@localhost tmp]# sed '3d' passwd | cat -n  删除passwd文件第三行,注意引号内的格式

1  root:x:0:0:jamm:/root:/bin/bash

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

3  adm:x:3:4:adm:/var/adm:/sbin/nologin

4  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@localhost tmp]# sed '3,5d' passwd | cat -n 删除passwd文件第三至五行,注意引号内的格式,行数之间用引号

1  root:x:0:0:jamm:/root:/bin/bash

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

[root@localhost tmp]# sed '4,$d' passwd | cat -n 删除passwd文件第四至最后行,注意引号内的格式,$表示最后一行

1  root:x:0:0:jamm:/root:/bin/bash

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

3  daemon:x:2:2:daemon:/sbin:/sbin/nologin

3.       选定行的范围:逗号

[root@TestAs4 chap04]# sed -n '/root/,/lp/p' datafile     所有在模板roott和lp所确定的行之间的行都被打印,看完下面的例子就明白了!

[root@localhost tmp]# sed -n '/root/,/lp/p' passwd | cat -n

1  root:x:0:0:jamm:/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

[root@localhost tmp]# sed -n '/root/,/bin/p' passwd | cat -n

1  root:x:0:0:jamm:/root:/bin/bash

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

[root@localhost tmp]# sed -n '/root/,/adm/p' passwd | cat -n

1  root:x:0:0:jamm:/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

[root@localhost tmp]# sed -n '/root/,/daemon/p' passwd | cat -n

1  root:x:0:0:jamm:/root:/bin/bash

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

3  daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@localhost tmp]#sed -n '1,5'p datafile           打印第一至五行的内容

[root@localhost tmp]# sed -n '1,5'p passwd | cat -n

1  root:x:0:0:jamm:/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

[root@localhost tmp]# sed -n '1,3'p passwd | cat -n

1  root:x:0:0:jamm:/root:/bin/bash

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

3  daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@localhost tmp]# sed  '/root/,/adm/s/$/###shitou###/' datafile   对于root和adm之间所有的行,末尾用###shitou###/替换

[root@localhost tmp]# sed '/root/,/adm/s/$/###shitou###/' passwd

root:x:0:0:jamm:/root:/bin/bash###shitou###

bin:x:1:1:bin:/bin:/sbin/nologin###shitou###

daemon:x:2:2:daemon:/sbin:/sbin/nologin###shitou###

adm:x:3:4:adm:/var/adm:/sbin/nologin###shitou###

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@localhost tmp]# sed -n '/root/,/lp/p' passwd | cat -n 打印root和lp之间所有的行

1  root:x:0:0:jamm:/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

[root@localhost tmp]# sed -n '/root/,/daemon/p' passwd | cat -n

1  root:x:0:0:jamm:/root:/bin/bash

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

3  daemon:x:2:2:daemon:/sbin:/sbin/nologin4.多点编辑:e命令

[root@localhost tmp]# sed -e 's/root/daolang/'    datafile    用daolang替换root字符串

[root@localhost tmp]# sed -e 's/root/daolang/' passwd

daolang:x:0:0:jamm:/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

[root@localhost tmp]#

5. 从文件读入:r 命令

[root@localhost tmp]# cat t.txt  查看原文件内容

* start*

Name    1st     2nd     3th

dmtsai  21000   20000   23000

bird2   43000   42000   41000

* end*

[root@localhost tmp]# sed '/daemon/r t.txt' passwd  再出现daemon那一行,之后读入t.txt文件的内容

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

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

daemon:x:2:2:daemon:/sbin:/sbin/nologin

* start*

Name    1st     2nd     3th

dmtsai  21000   20000   23000

bird2   43000   42000   41000

* end*

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

注:如果不止一个daemon 则t.txt的内容就将显示在所有匹配行的下面,如下面所示:

[root@localhost tmp]# sed '/bin/r t.txt' passwd

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

* start*

Name    1st     2nd     3th

dmtsai  21000   20000   23000

bird2   43000   42000   41000

* end*

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

* start*

Name    1st     2nd     3th

dmtsai  21000   20000   23000

bird2   43000   42000   41000

* end*

daemon:x:2:2:daemon:/sbin:/sbin/nologin

* start*

Name    1st     2nd     3th

dmtsai  21000   20000   23000

bird2   43000   42000   41000

* end*

adm:x:3:4:adm:/var/adm:/sbin/nologin

* start*

Name    1st     2nd     3th

dmtsai  21000   20000   23000

bird2   43000   42000   41000

* end*

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

* start*

Name    1st     2nd     3th

dmtsai  21000   20000   23000

bird2   43000   42000   41000

* end*

6. 写入文件:w命令

[root@TestAs4 chap04]# sed  -n '/bin/w  newfile2'  datafile   命令w表示把所有包含bin的行写入到newfile2

[[root@localhost tmp]# sed '/bin/w passwd.txt' passwd

root:x:0:0:jamm:/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

[root@localhost tmp]# more passwd.txt

root:x:0:0:jamm:/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

7. 追加:a 命令

[[root@localhost tmp]# sed '/root/a --->>> test -a arguments ' passwd

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

--->>> test -a arguments

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

注: 在出现首个单词是root的后一行追加---->THE NORTH SALES DISTRICT HAS MOVED行

8. 插入: i 命令

[root@TestAs4 chap04]# sed '/eastern/i\

> NEW ENGLAND REGION\

> -------------------------------------' datafile

northwest       NW      Charles Main            3.0     .98     3       34

western         WE      Sharon Gray             5.3     .97     5       23

southwest       SW      Lewis Dalsass           2.7     .8      2       18

southern        SO      Suan Chin               5.1     .95     4       15

southeast       SE      Patricia Hemenway       4.0     .7      4       17

NEW ENGLAND REGION

-------------------------------------

eastern         EA      TB Savage               4.4     .84     5       20

northeast       NE      AM Main Jr.             5.1     .94     3       13

north           NO      Margot Weber            4.5     .89     5        9

central         CT      Ann Stephens            5.7     .94     5       13

注:如果模板eastern被匹配,i命令把反斜杠后面的文本插入到包含eastern的行的前面

9. 替换:s 命令

[root@TestAs4 Oracle]# pwd

/u01/app/oracle

[root@TestAs4 oracle]# pwd  | sed  's/\/[^\/]*$/old/'      把“/ u01/app/oracle”的 “/oracle”替换为old

/u01/appold

[root@TestAs4 chap04]# sed -n 's/Hemenway/Jones/pg' datafile      所有的Hemenway行被Jones 替换并打印

southeast       SE      Patricia Jones  4.0     .7      4       170b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linuxsed是一个非常强大的文本处理工具,可以与正则表达式相结合使用。sed正则表达式用于匹配和操作文本的模式。 在sed正则表达式可以用于以下几种操作: 1. 匹配行:使用正则表达式匹配满足条件的行。 2. 替换文本:使用正则表达式匹配并替换文本。 3. 删除行:使用正则表达式匹配并删除满足条件的行。 4. 插入和追加文本:在满足条件的行之前或之后插入或追加文本。 5. 改变行:使用正则表达式修改满足条件的行。 在sed正则表达式使用特定的语法来表示不同的模式和操作。一些常用的正则表达式的语法包括: 1. 元字符:用于表示特殊的字符和字符类,如.表示任意字符,*表示前一个字符的零个或多个重复。 2. 字符类:用于匹配一组字符,如[a-z]表示小写字母,[0-9]表示数字。 3. 量词:用于指定字符或字符类的重复次数,如?表示零次或一次,+表示一次或多次,{n}表示精确重复n次。 4. 锚点:用于指定匹配的位置,如^表示行的开头,$表示行的结尾。 5. 分组和引用:用于将模式分组,并在替换引用分组。 举个例子,假设我们有以下文本文件(luffycity.txt): His name is chaoge. I teach Linux. My linux is good. I like linux. I like linux very much. My telphone is 00000000 His qq is 88888888. His website is http://pythonav.cn. 如果我们想在每行下面插入"---",可以使用以下sed命令: sed 'a ---' luffycity.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值