linux sed基本使用

sed基本编程

理论部分

 

编辑特性

 

sed 流编辑器 stream editor  文本编辑器 操作文本,按行进行.逐行处理  并不直接处理文本文件,而是将编辑的行,读取到内存 (内存空间称为模式空间) 在内存中编辑 输入到屏幕上.

 

文本处理流程

注释:

把行 读取到内存 à如果符合模式à使用sed命令编辑à输出到屏幕

 

 

sed根据匹配的模式条件处理文本

sed默认不对源文件做任何处理,只对模式空间的数据做处理.处理结束 将模式空间的内容输出到屏幕;

sed简单的文本编辑语言

 

 

sed语法格式

sed [选项]AddressCommand 修饰符 file1… file2 ..

 

参数解释

选项:

-n:不显示模式空间的内容,只显示符合条件的行.

-i:直接修改源文件(小心)

-e:多个操作同时进行 

Address:  地址范围

 

1. LineNumber       #特定的行    ($:最后一行)

2. Start,End          # 起始行,结束行 (1,100)

3. /^root/           #正则表达式   (找出以root开头的行)

4. mode1,mode2    #第一次被模式1匹配的行开始,到第一次被模式2匹配的行结束.

5. StartLine, +n      #从现在的行到往后n行  5,+2

 

Command: 执行的命令

 

   d: #删除符合条件的行;

p:输出 打印符合条件的行;

   a \内容:在指定的行后面追加新的内容;

 i \内容:在指定的行前面追加新的内容;

r  file :将指定的文件的内容添加到符合条件的行

w file : 将指定的文件的内容另存为符合条件的行处

s /模式/字符/ :查找并替换   s###  s@@@

修饰符

 

 g :替换所有

 i: 忽略字符的大小写

 

 

实战部分

d: #删除符合条件的行;          

root@compute:~/sed#sed‘1,2d’  /etc/passwd    删除/etc/passwd 前两行.

root@compute:~/sed#sed‘1d’   /etc/passwd     只删除第一行.

root@compute:~/sed#sed‘3,$d’  /etc/passwd    删除/etc/passwd   3-最后一行

root@compute:~/sed#sed‘/root/d’ /etc/passwd    使用模式 删除符合root的行.但是会删除以root 开头的所有行

root@compute:~/sed#sed‘1,+3d’/etc/passwd     删除4行 第一到第四行.

root@compute:~/sed#sed '31,+6d' passwd          删除 31行后面6行

 

p:输出 打印符合条件的行;

sed‘/^root/p’ /etc/passd  #显示以root开头的行,会显示所有内容;

root@compute:~/sed#sed '/^root/p' passwd

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

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

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

 

   

root@compute:~/sed# sed -n'/^root/p' passwd #只显示符合条件的行;

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

 

a \内容:在指定的行后面追加新的内容;

root@compute:~/sed#sed '/^nova/a\Glance:x:1002:1002::/home/glance:/' passwd

nova:x:112:120::/var/lib/nova:/bin/false

Glance:x:1002:1002::/home/glance:/

#在匹配nova开头的行后面添加一行新的内容 内容是 “Glance:x:1002:1002::/home/glance:/”

 

添加多行,使用\n换行符

root@compute:~/sed#sed '/^nova/a\#This is a Glance user\nGlance:x:1002:1002::/home/glance:/'passwd

nova:x:112:120::/var/lib/nova:/bin/false

#This is a Glance user

Glance:x:1002:1002::/home/glance:/

 

i \内容:在指定的行前面插入新的内容;

root@compute:~/sed# sed'/^nova/i\#Inert a line:' passwd

#Inerta line:

nova:x:112:120::/var/lib/nova:/bin/false

 

r  file : 将指定的文件的内容添加到符合条件的行处

root@compute:~/sed# sed'5r /etc/shadow' passwd

将/etc/passwd第5行的后面添加/etc/shadow文件里的内容

 

$r最后一行

root@compute:~/sed# sed'$r /etc/shadow' passwd

1,2r 第一和第二行都添加

root@compute:~/sed# sed'1,2r test.txt' passwd

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

#This is a test file.

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

#This is a test file.

 

 

w file : 将指定的文件的内容另存为符合条件的行处

root@compute:~/sed# sed'/^root/w root.txt' passwd

root.txt  另存为的文件  目的文件

passwd 

 

s /模式/字符/查找并替换

将root替换为andy,-g为全部替换,不加g只替换第一个查询到的

root@compute:~/sed#sed 's/root/andy/' root.txt

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

root@compute:~/sed#

 

 

 

g:全部替换

root@compute:~/sed#sed 's/root/andy/g' root.txt

andy:x:0:0:andy:/andy:/bin/bash


本文转自    OpenStack2015 博客,原文链接:      http://blog.51cto.com/andyliu/1851043  如需转载请自行联系原作者


上一篇:window svn本地搭建


下一篇:开发人员应该对IIS理论层的知识了解的多一些~第一讲 什么是Http?