sed是一个非交互式文本编辑器,sed从文本的一个文本行或标准输入中读取数据,将其复制到缓冲区,
然后读取命名行或脚本的第一个命令,对此名要求的行号进行编辑,重复此过程直到结束。
sed命令格式为:
sed [选项] 'sed命令' 输入文件
sed命令由定位文本和sed编辑命令两部分组成。
sed提供两种方式定位文本:
1,使用行号。
2,使用正则表达式。
sed编辑命令:
p 打印匹配行
= 打印文件行号
a\ 在定位行号后追加文本信息
i\ 在定位行号之前插入文本信息
d 删除定位行
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文本中读取文件
w 将文本写入另一个文件中
y 变换字符
q 第一个模式匹配后退出
l 显示与八进制ASCII等价的控制符
{} 在定位执行的命令组
n 读取下一行,用下一的命令处理新的行
h 将模式缓冲区的文本复制到保持缓冲区
H 将模式缓冲区的文本追加到保持缓冲区
x 互换模式缓冲区和保持缓冲区的内容
g 将保持缓冲区的内容复制到模式缓冲区
G 将保持缓冲区的内容追加到模式缓冲区
sed编程命令选项的例子:
-n 取消sed的默认打印全部输出
[iyunv@localhost lianxi]# sed -n '1p' output
root:x:0:0:root:/root:/bin/bash
[iyunv@localhost lianxi]# sed '1p' output
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
-e 向sed传递多个编辑命令
[iyunv@localhost lianxi]# sed -n -e '/root/p' -e '/root/=' output
root:x:0:0:root:/root:/bin/bash
1
operator:x:11:0:operator:/root:/sbin/nologin
2
注意sed不支持同时带多个编辑命令的用法,如:
[iyunv@localhost lianxi]# sed -n -e '/root/p=' output
sed:-e 表达式 #1,字符 8:extra characters after command
-f 只有调动sed脚本时才启用,如追加,插入,修改,删除,替换文本时才调用。
脚本:
#!/bin/sed -f
/root/a\"this is new line"
调用:
[iyunv@localhost lianxi]# ./sed.sh output
root:x:0:0:root:/root:/bin/bash
"this is new line"
sed编辑命令的一组例子:
1.修改文本 c
sed '指定位置 i\"text“ 输入文件
2.插入文本 i
sed '指定位置 i\"text“ 输入文件
3.删除文本 d
指定位置 d
4.替换文本 s
s/被替换的/新的/[替换选项]
g:替换所有的(默认只替换第一个)
5.写入新文件
指定位置 w 文件名
6.读入新文件
指定位置 r 文件名
7.退出命令 q
8.变换命令 y
'y/原字符序列/新字符序列/' 输入文件
10.在定位执行组命令和-e选项的作用类似。
[iyunv@localhost lianxi]# sed -n '/root/{p;=}' output
root:x:0:0:root:/root:/bin/bash
1
operator:x:11:0:operator:/root:/sbin/nologin
2