linux-sed命令

第1章 sed基础

第1章 sed知识点

1.1 sed的选项  stream editor 流编辑器

 -r              支持扩展正则

 -n              取消默认输出

 -i               直接修改不输出到桌面

 -i.bak        备份

1.1 sed是什么

1.2 sed的书写格式

sed    ‘条件命令’

sed      ‘pattern命令’

sed      ‘模式命令’

字符流编辑器 Stream Editor

1.3 sed命令执行过程

1.读取文件内容第1行

2.是否满足条件

     1).满足条件 执行对应的命令 p  s  d 

     2).不满足   继续第1步

3.截止到文件的最后一行

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

第2章 sed命令的使用

sed增删改查   不加i选项只会把修改内容输出到并没有真正修改,加上i选项会直接修改文件内容

1.2 sed功能与版本

1)处理纯文本文件,日志,配置文件等==>Linux

2)增加、删除、修改、查询

3)sed
–version

[root@oldboyedu43 ~]# sed –version

GNU sed version 4.2.1

Copyright (C) 2009 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,

to the extent permitted by law.

 

GNU sed home page: <http://www.gnu.org/software/sed/>.

General help using GNU software: <http://www.gnu.org/gethelp/>.

E-mail bug reports to: <bug-gnu-utils@gnu.org>.

Be sure to include the word “sed” somewhere in the “Subject:” field.

1.3 语法格式

sed [选项]
[sed指令] [输入文件]

sed -i.bak
‘s#oldboy#oldgirl#g’ oldboy.txt

-i
 —-sed命令的参数

s —sed指令

g
—小尾巴/修饰

2.1 sed 增加  cai

c   replace 替换

a   append 追加

i   insert 插入

1.4 sed 命令运行过程

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern
space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

2.1.1 在person.txt文件第三行下追加12306,xiao,UFO

查看person.txt文件

[root@zeq lx]# cat person.txt

101,zeq,CEO

102,zhang,CTO

103,Love,COO

104,yy,CFO

105,faker,CIO

110,ahao,COCO

第三行下追加12306,xiao,UFO

[root@zeq lx]# sed '3a12306,xiao,UFO' person.txt      a追加,3a在第三行下追加

101,zeq,CEO

102,zhang,CTO

103,Love,COO

12306,xiao,UFO

104,yy,CFO

105,faker,CIO

110,ahao,COCO

第2章 查询 p(print)

2.1.2 在person.txt文件第三行上插入12306,xiao,UFO

[root@zeq lx]# sed '3i12306,xiao,UFO' person.txt

101,zeq,CEO

102,zhang,CTO

12306,xiao,UFO

103,Love,COO

104,yy,CFO

105,faker,CIO

110,ahao,COCO

2.1 按行查询

2.1.3 把person.txt文件第三行替换成12306,xiao,UFO

[root@zeq lx]# sed '3c12306,xiao,UFO' person.txt

101,zeq,CEO

102,zhang,CTO

12306,xiao,UFO

104,yy,CFO

105,faker,CIO

110,ahao,COCO

2.1.1 单行

1.   p 打印模式空间的内容

2.   -n 取消默认的sed软件的输出

创建环境

[root@oldboyedu43 ~]# cd /oldboy/

[root@oldboyedu43 oldboy]# touch person.txt

[root@oldboyedu43 oldboy]# cat >>person.txt<<EOF

> 101,oldboy,CEO

> 102,zhangyao,CTO

> 103,Alex,COO

> 104,yy,CFO

> 105,feixue,CIO

> EOF

1: 取具体的某一行   sed -n ‘3p’ person.txt

[root@oldboyedu43 oldboy]# sed -n ‘3p’ person.txt

103,Alex,COO

2. 显示文件的最后一行  sed -n ‘$p’
person.txt

[root@oldboyedu43 oldboy]# cat person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO                                                                                                      

[root@oldboyedu43 oldboy]# sed -n ‘$p’ person.txt

105,feixue,CIO  

3. 取包含xxx的行

[root@oldboyedu43 oldboy]# sed -n ‘/oldboy/p’ person.txt 

101,oldboy,CEO

2.1.4 在文件最后一行增加

12306,xiao,UFO

12580,tao,XO

[root@zeq lx]# sed  '$a12306,xiao,UFOn12580,tao,XO' person.txt    $最后一行   n回车

101,zeq,CEO

102,zhang,CTO

103,Love,COO

104,yy,CFO

105,faker,CIO

110,ahao,COCO

12306,xiao,UFO

12580,tao,XO

2.1.2 多行

1. 连续的多行-地址范围精讲  连续的行使用 , 号

没有地址,默认匹配所有行

sed -n ‘从哪里来,哪里去p’

  数字 :sed -n ‘1,3p’ person.txt

[root@oldboyedu43 oldboy]# sed -n ‘1,3p’ person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

 2. 正则地址范围-模糊,容易找多了

 正则 :sed -n ‘/oldboy/p’ person.txt

          sed -n ‘/oldboy/,/yy/p’
person.txt

[root@oldboyedu43 oldboy]# sed -n ‘/oldboy/p’ person.txt

101,oldboy,CEO

[root@oldboyedu43 oldboy]# sed -n ‘/o.*y/p’ person.txt 

101,oldboy,CEO

[root@oldboyedu43 oldboy]##显示包含oldboy的行到包含yy的行

[root@oldboyedu43 oldboy]# sed -n ‘/oldboy/,/yy/p’ person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

3. 不连续的多行 使用 ; 号隔开(使用分号)

[root@oldboyedu43 oldboy]# #同一行放多个命令用;

[root@oldboyedu43 oldboy]# sed -n ‘1p;4p;5p’ person.txt 

101,oldboy,CEO

104,yy,CFO

105,feixue,CIO

2.2 sed 删除 d   

2.1.3 过滤多个字符

-r
支持扩展正则表达式

|
扩展正则,同时过滤多个字符

[root@oldboyedu43 oldboy]# sed -nr ‘/oldboy|yy/p’ person.txt 

101,oldboy,CEO

104,yy,CFO sed里面的正则字符左右必须有“/”

2.2.1 删除第2行到第5行

[root@zeq lx]# sed '2,5d' person.txt

101,zeq,CEO

110,ahao,COCO

第3章 增加

2.2.2 删除从yy开始的行到文件结尾的内容

[root@zeq lx]# sed   '/yy/,$d' person.txt             $文件结尾

101,zeq,CEO

102,zhang,CTO

103,Love,COO

3.1 单行增加

a
追加append,在指定行后添加一行或多行文本

i
插入insert,在指定行前添加一行或多行文本

[root@oldboyedu43 oldboy]# sed ‘$a 106,wuxingge,UFO’ person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

106,wuxingge,UFO

[root@oldboyedu43 oldboy]# sed ‘2i 106,wuxingge,UFOn107,lee,XO’ person.txt

101,oldboy,CEO

106,wuxingge,UFO

107,lee,XO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

2.2.3 删除包含ahao的行

[root@zeq lx]# sed '/ahao/d' person.txt

101,zeq,CEO

102,zhang,CTO

103,Love,COO

104,yy,CFO

105,faker,CIO

3.2 多行增加

换行符 n

[root@oldboyedu43 oldboy]# sed ‘$a 106,wuxingge,UFOn107,lee,XO’ person.txt 

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

106,wuxingge,UFO

107,lee,XO

注:cat 命令多行追加

  echo只能在追加到文件末尾
 echo
>>

  vim
可以写入

2.2.4 删除不包含ahao的行

[root@zeq lx]# sed '/ahao/!d' person.txt             !取反,排除

110,ahao,COCO

第4章 删除

2.3 sed 替换 ‘s###g’

4.1 单行删除

  d删除 delete

  $ 代表文件的最后一行

  ‘1d’  或 ‘/oldboy/d’

[root@oldboyedu43 oldboy]# cat person.txt

101,oldboy,CEO

102,zhangyao,CTO  

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[root@oldboyedu43 oldboy]# sed ‘/oldboy/d’ person.txt 

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

发表评论

电子邮件地址不会被公开。 必填项已用*标注