CentOS7 运维 - sed编辑器 | 多例实践 | 超详细

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粘贴到行尾

猜你喜欢

转载自blog.csdn.net/qq_42427971/article/details/114752456