sed命令的作用linux,linux下sed i命令作用(转载)

sed是一种流编编器,stream edit 它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功物能不同凡响。

处理时,把当前处理的行存储在临时缓冲区(内存)中,称为”模式空间”( pattern space),接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。

接着理下一行,这样不断重复,直到文件末。可使用了写入的命令,将内容更新。

定位行地址用于决定对哪些行进行编辑。行定位地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定行定位地址,sed将处理输入文件的所有行。

sed命令功能

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

命令  功能

a\  在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行  a代表append之意

c\  用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行  c代表current之意

i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行   i代表 insert之意

d   删除行  d为delete之意

h   把模式空间里的内容复制到暂存缓冲区

H   把模式空间里的内容追加到暂存缓冲区

g   把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容

G   把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面

l   列出非打印字符 l代表list之意

p   打印行 p代表print之意

n   读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理 n为next之意

q   结束或退出sed   q为quit之意

r   从文件中读取输入行 r代表read之意

!   对所选行以外的所有行应用命令 !代表“非” 代表反选之意

s   用一个字符串替换另一个

g   在行内进行全局替换   g 代表global之意:全局

w   将所选的行写入文件 w代表write之意

x   交换暂存缓冲区与模式空间的内容  x代表exchange交换之意

y   将字符替换为另一字符(不能对正则表达式使用y命令)

sed常见命令参数

1

2

3

4

5

6

7

p==print

d:delete

=:打印匹配行的行号

-n 取消默认的完整输出,只要需要的

-e 允许多项编辑

-i 修改文件内容

-r 不需要转义

1

注意:& 符号在sed命令中代表上次匹配的结果

常用的命令展示

sed擅长行输出,附源文件:

1

2

3

4

5

6

7

8

9

10

11

12

hhh     pts/1        192.168.25.1     Sat Jun 30 22:04   still loggedin

reboot   system boot  2.6.32-358.el6.i Sat Jun 30 22:04 - 22:43  (00:38)

omc     pts/0        192.168.25.1     Sat Jun 30 20:16 - down   (00:00)

reboot   system boot  2.6.32-358.el6.i Sat Jun 30 19:38 - 20:16  (00:37)

root     pts/1        192.168.25.1     Sat Jun 30 12:20 - down   (00:55)

root     pts/0        192.168.25.1     Sat Jun 30 11:53 - down   (01:22)

reboot   system boot  2.6.32-358.el6.i Sat Jun 30 11:52 - 13:15  (01:23)

root     pts/0        192.168.25.1     Sat Jun 30 05:40 - down   (02:51)

reboot   system boot  2.6.32-358.el6.i Sat Jun 30 05:38 - 08:32  (02:54)

root     pts/0        192.168.25.1     Fri Jun 29 21:01 - down   (06:21)

wtmp begins Tue Jun  9 03:57:56 2015

只打印第三行

1

sed -n'3p' /var/log/yum.log

880dc6e957cc437617810f4000be09d7.png

只查看文件的第3行到第9行

1

sed -n'3,9p' /var/log/yum.log

0e294f12e9471b0c69d7b7a3c2801812.png

过滤特定字符串,显示正行内容

1

sed -n'/root/p' yum.log

b824c8dca97a8969e0f302038c8c7aad.png

显示包含"hhh"的行到包含"omc"的行之间的行

1

sed -n'/hhh/,/omc/p' yum.log

5465978f69c37838e2e5de120ca94ae3.png

打印1-5行,并显示行号

1

sed -n -e'1,5p' -e'='yum.log

cd8c6a7db09eddabf9abfd63214c53ec.png

仅仅显示匹配字符串的行号

1

sed -n'/root/p' yum.log

35260849f67cf3ef99f7529d1b20efa3.png

打印匹配行的内容和符号【相当于后面又根据关键词查询了一次】

1

sed -n -e'/root/p' -e'/root/=' yum.log

c4c014628edfa2dd4b34981894c226b2.png

用world 替换yum.log文件中的root【真实写入】

1

2

3

4

5

sed -i's/root/world/g' yum.log

==>sed -i's#hhh#HHHH#g' h.txt     与上同

s==search  查找并替换

g==global  全部替换

-i: implace

03c79166dabb2dd6b5f6d82a7abf92cf.png

打印最后一行

1

sed -n'$p' yum.log

f2925217fda2c5fb30f2800e7dd58961.png

在文件第一行添加happy,文件结尾添加new year

1

2

sed -e'1i happy' -e'$a new year' yum.log       【界面显示】

sed -i -e'1i happy' -e'$a new year' yum.log    【真实写入文件】

4d6b527b102a2402624491561cbc776e.png

在文件第一行和第四行的每行下面添加hahaha

1

sed '1,4i hahaha' yum.log

8ac9863ced825fde3969175c913d29a5.png

& 符号在sed命令中代表上次匹配的结果

1

sed 's/world/hello_&/g' yum.log

4a45be60d0c0d7fe4cb5efd57bcd5efc.png

删除第3到第9行,只是不显示而已

1

sed  '3,9d' /var/log/yum.log

fc1e833bea77004d871b43b6bf04befc.png

删除包含"hhh"的行到包含"omc"的行之间的行

1

sed '/hhh/,/omc/d' yum.log

a999bc80eb121f94d300e7a1f1938112.png

删除包含"omc"的行到第十行的内容

1

sed '/omc/,10d' yum.log

b2ed6f9eb596b7601a223090f49b6ca8.png

备注:范围可以用数字、正则表达式、或二者的组合表示

显示中5到10行里匹配root,把行内所有的root替换为FTL,并打印到屏幕上

1

2

sed '5,10 s/root/FTL/g' yum.log【仅显示用】

sed -ised '5,10 s/root/FTL/g' yum.log【-i 会真正替换信息】

8d172199637456ae975be35817187beb.png

-e是编辑命令,用于多个编辑任务

1

2

删除1到5行后,替换reboot为shutdown

sed -e'1,5d' -e'=' -e's/reboot/shutdown/g'  yum.log

f6f178e8534ed9fc18ac3004d08c080c.png

打印3到6行的内容,并匹配reboot替换为shutdown

1

sed -n -e'3,6p' -e's/reboot/shutdown/g'  yum.log

58a87b7466ea3cfc31793472bfec34d2.png

-r命令是读命令。sed使用该命令将一个文本文件中的内容加到当前文件的特定位置上

1

2

[root@localhost log]# cat test.txt

[root@localhost log]# sed '/root/ r /var/log/test.txt' yum.log  【yum.log  匹配root后读入text.txt的内容在匹配内容之下,仅显示用】

7f8be57f8c68d3e597b00ee27a0268ae.png

-w是写入命令

1

2

3

sed  '/root/ w /home/omc/root.txt' yum.log       【yum.log匹配root后写入root.txt',真实写入】

sed -n'/root/ w /home/omc/root.txt' yum.log    【添加-n参数后,不打印源文件】

ll/home/omc/root.txt

caa57b72cdc835c8511b294fd04d3921.png

打印1-5行,并显示行号

1

sed -n -e'1,5p' -e'='  yum.log

f9cb3ca4f7bbad08a21807e6f8578a94.png

sed的正则匹配

正则匹配IP和子网掩码

1

2

3

4

[root@localhost log]#  ifconfig |sed -n '2p'

[root@localhost log]# ifconfig |sed -n '2p' | sed -r 's#.*r:(.*) B.*k:(.*)#\1 \2#g'

(.*)表示匹配的项,之后可以用\1取出第一个括号内匹配的内容,\2取出第二个括号内匹配的内容

61ce653677cd992d05f556d4e6c4a1da.png

配合find命令的使用

1

2

3

4

find . -name"*.txt" |xargs   sed -i's/hhhh/\hHHh/g'

find . -name"*.txt" |xargs   sed -i's#hhhh#hHHh#g'

find . -name"*.txt" -exec sed -i's/hhhh/\hHHh/g' {} \;

find . -name"*.txt" |xargs cat

sed错误使用

1

2

sed 's#,# #h' h.txt |cut -d" " -f 3,5 h.txt    cut查看h.txt文件

sed 's#,# #h' h.txt |cut -d" " -f 3,5          --> 正确的用法

作者:小a玖拾柒

出处:http://www.cnblogs.com/ftl1012/

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

个性签名: 所有的事情到最後都是好的,如果不好,那說明事情還沒有到最後~

本文版权归作者【小a玖拾柒】和【博客园】共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值