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的默认打印全部输出
[root@localhost lianxi]# sed -n '1p' output
root:x:0:0:root:/root:/bin/bash
[root@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传递多个编辑命令
[root@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不支持同时带多个编辑命令的用法,如:
[root@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"
调用:
[root@localhost lianxi]# ./sed.sh output
root:x:0:0:root:/root:/bin/bash
"this is new line"
sed文本定位的一组例子:
1.匹配元字符:使用"\"即可
2.$在sed名中表示最后一行
[root@localhost lianxi]# sed -n '$p' output
operator:x:11:0:operator:/root:/sbin/nologin
tail命令也可以
[root@localhost lianxi]# tail -1 output
operator:x:11:0:operator:/root:/sbin/nologin
3.!表示取反
[root@localhost lianxi]# sed -n '1!p' output
operator:x:11:0:operator:/root:/sbin/nologin
4.使用行号与关键字匹配限定行范围
/pattern/,x 或 x,/pattern/
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选项的作用类似。
[root@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
sed高级编辑命令的一组例子:
1.处理匹配行的下一行
[root@localhost lianxi]# sed '/^root/{n;s/operator/xixi/g;}' output
root:x:0:0:root:/root:/bin/bash
xixi:x:11:0:xixi:/root:/sbin/nologin
2.sed缓冲区的处理,sed有两种缓冲区,模式缓冲区(pattern buffer)和保持缓冲区(hold buffer)前面提及的是模式缓冲区。sed的一些命令可以对保持缓冲区的内容处理在和模式缓冲区进行兑换。有h,x,G这几个选项。
3.利用分号分隔多编辑命令,等价于用-e选项引出多个编辑命令。
[root@localhost lianxi]# sed 's/xixi/haha/;s/bash/ksh/' output
root:x:0:0:root:/root:/bin/ksh
operator:x:11:0:operator:/root:/sbin/nologin
阅读(613) | 评论(0) | 转发(0) |