sed编辑器
sed
是一种流编辑器,从上(文件的开头)往下一行一行的去处理
可以预先提供命令规则来对数据流进行编辑
sed工作流程
①读取
从输入流中读取一行内容并存储到临时的缓冲区中(模式空间)
文件|管道}标准输入中读取内容->在内存中处理
②执行
所有sed
命令会在模式空间中按照顺序依次执行
通过命令修改后,只修改了缓冲区的内容,而不是文件本身的内容
如果想要保存可以使用选项 -i 或者 输出重定向符号 >
③显示
发送修改后的内容到输出流,在发送数据后,模式空间会被清空
在所有文件内容都被处理完前,会重复上面的执行步骤,直至所有内容被处理完
拓展:保存空间
命令格式
sed [选项] '操作' file1 file2
sed [选项] 'n{
操作1
操作2
...
}' file1 file2 ...
n代表行数
常用选项
- -e 或 --expression= 表示用指令命令来处理输入的文本文件
- -f 或 --file= 表示用指定的脚本文件来处理输入的文本文件
- -n --quiet 或 silent 禁止sed编辑器输出,但可以与p命令一起使用完成输出
- -i 直接修改目标文本文件
常用操作
- s 替换 替换指定字符
- d 删除 删除选定的行
- a 增加 在当前行下面增加一行指定内容
- i 插入 在选定行上面插入一行指定内容
- c 替换 将选定行替换为指定内容
- y 字符转换 转换前后的字符同
- p 打印 如果同时指定行则打印指定行,如果不指定则打印所有内容,如果有非打印字符则以
ASSCII
码输出
举例
打印第一行
sed -n '1p' file
打印一到三行
sed -n '1,3p' file
打印第一行和第三行
sed -n '1p;3p' file
打印一到三行
sed -n '1,+2p' file
打印五行后退出
sed '5q' file
打印奇数行 n表示移动到下一行
sed -n 'p;n' file
打印奇数行
sed -n '2,${n;p}' file
打印所有包含usr的行
sed -n '/usr/p' file
打印所有r开头的行
sed -n '/^r/p' file
打印所有nologin结尾的行
sed -n '/nologin$/p' file
打印所有包含ftp或root的行
sed -n '/ftp\|root/p' file
打印第二行开始显示搜索直到找到nologin的行
sed -n '2,/nologin/p' file
删除行
删除所有内容
sed 'd' file
删除第三行内容
sed '3d' file
删除二到四行内容
sed '2,4d' file
删除除了nologin以外的内容
sed '/nologin$/!d' file
从一个位置2打开删除功能,从二个位置3关闭删除功能
sed '/2/,/3/d' file
如果又碰到了位置2还会打开删除功能,如果碰不到就删到底
替换
行范围 s/
旧字符串/新字符串/替换标记
四种替换标记
①数字
- 表明新字符串将替换第几处匹配的地方
②g
- 表示新字符串将会替换所有匹配的地方
③p
- 打印与替换命令匹配的行[与-n一起使用]
④w 文件
- 将替换的结果写道文件中
将第一个root替换成admin并打印出来
sed -n 's/root/admin/p' /etc/passwd
将所有root替换成admin并打印出来
sed -n 's/root/admin/gp' /etc/passwd
将所有注释替换成空格[去除]
sed -n 's/^#/ /p' file
将一到十行开头替换为#号
sed -n '1,10s/^/\#/p' /etc/passwd
将root开头的$替换为#
sed -n '/^root/ s/$/#/p' /etc/passwd
将一到十行保存到file中
sed '1,10w file' /etc/passwd
!# / 作为字符串分隔符
替换第几个在分隔符后面加上数字,替换全部则使用g
插入
sed '/abc/c ABC' file
替换包括abc
的一整行为ABC
sed '/abc/ y/ABC/123' file
sed '1,3a abc' file
在一到三行下增加abc
sed '$r /etc/resolv/' file
读取整个内容到file
剪切
sed '/root/{H;d};$G' file
将root H复制到剪贴板->d删除->G粘贴到行尾