sed 流编辑命令
Posted joe.chu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed 流编辑命令相关的知识,希望对你有一定的参考价值。
1.命令功能
sed非交互式的流编辑器,sed不会修改源文件内容,除非重定向来保存输出结果;默认情况下所有的输出行都将被打印到屏幕上。
2.语法格式
sed [option] {script-only-if-no-other-script} [input-file]
sed 选项 ‘操作命令’ 输入文本
sed 常用选项说明
选项 |
功能 |
-n |
安静模式,只输出被sed处理的行 |
-f |
指定一个sed脚本文件到命令行执行 |
-r |
sed使用扩展正则 |
-i |
直接修改文件读取的内容,不在屏幕上输出 |
sed操作命令
sed命令 |
功能 |
a\ |
在当前行后添加一行或多行文本 |
i\ |
在当前行插入文本 |
q |
结束或退出sed |
r |
从文件中读取输入行 |
c\ |
用文本替换或修改选中的行 |
d |
删除行 |
h[H] |
复制[追加]模式空间中的内容到缓存区 |
g |
将缓存区的内容,复制到模式空间,覆盖该处原有的内容 |
G |
将缓存区的内容,复制到模式空间,追加在原有内容后面 |
p |
打印行 |
替换标志 |
|
s/regexp/replacement/ |
将regexp内容替换成replacement |
g |
在行内全局替换 |
p |
打印行 |
w |
将行写入文件 |
x |
交换暂存缓冲区与模式空间的内容 |
y | y/source/dest/ |
将字符转换成另一个字符(不能对正则表达式使用y命令) |
3.使用范例
示例1 p命令,打印包含root的行
[[email protected] ~]# sed ‘/root/p‘ test.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash #打印内容
bin:x:1:1:bin:/bin:/sbin/nologin
示例 2 n安静模式,只打印包含root的行
[[email protected] ~]# sed -n ‘/root/p‘ test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
示例3 d删除命令,删除行
[[email protected] ~]# cat -n test.txt
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
[[email protected] ~]# sed ‘3d‘ test.txt #第三行“daemon:x:2:2:daemon:/sbin:/sbin/nologin”被删除
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
删除第1行到第3行
[[email protected] ~]# sed ‘1,3d‘ test.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
删除包含root的行
[[email protected] ~]# sed ‘/root/d‘ test.txt #删除包含root的行
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
示例4 替换:s命令
全局nologin替换成no
[[email protected] ~]# sed ‘s/nologin/no/g‘ test.txt #s表示替换,g表示全局
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/no
daemon:x:2:2:daemon:/sbin:/sbin/no
adm:x:3:4:adm:/var/adm:/sbin/no
lp:x:4:7:lp:/var/spool/lpd:/sbin/no
注:如果没有g,只会替换每一行的第一个nologin。
以上是关于sed 流编辑命令的主要内容,如果未能解决你的问题,请参考以下文章