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 如需转载请自行联系原作者