sed编辑器

sed
流编辑器 stream editer,是以行为单位的处理程序

sed 流编辑器 stream editer

语法
sed [options] 'command' in_file[s]
options 部分
-n:静默模式,不打印默认输出
-e:添加多条编辑规则
-i:将修改后的输出内容保存到文件中
-f:将编辑规则保存为文件的格式

-r:使用扩展模式
command 部分
'[地址1,地址2] [函数] [参数(标记)]'

定址的方法 1.数字 2.正则
数字
十进制数
1 单行
1,3 范围 从第一行到第三行
2,+4 匹配行后若干行
4,~3 从第四行到下一个3的倍数行
2~3 第二行起每间隔三行的行
$ 尾行
1! 除了第一行以外的行
正则
正则必须用//包裹起来
扩展正则需要用 -r 参数或转义

数字定址:sed -n '1p' /etc/passwd

正则定址:sed -n '/^root/p' /etc/passwd

函数
增删改
a 后插
c 替换整行
i 前插
d 删除
输入输出
p 打印匹配的行 一般和 -n 参数连用,以屏蔽默认输出
r 从文件中读入
w 写入到文件中
控制流
! 命令取反 例: 1!d 删除第一行以外的行
{} 命令组合 命令用分号分隔 {1h;G} 可以理解为 -e 参数的另一种写法

= 打印行号(输入行的号码,而非处理的次数行号) 例如: sed -n '2{=;p}' infile
n 读入下一行到模式空间 例:'4{n;d}' 删除第5行
N 而是追加下一行到模式空间,再把当前行和下一行同时应用后面的命令

s 字符串替换 s/old/new/

() 保存被匹配的字符 以备反向引用N时使用 最多9个标签 标签顺序从左至右
& 替换时使用,在不定义标签时使用(反向引用)

$ sed -n 's/root/ABCDEF/p' /etc/passwd

ABCDEF:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/ABCDEF:/sbin/nologin

$ sed -n 's/root/ABCDEF/gp' /etc/passwd

ABCDEF:x:0:0:ABCDEF:/ABCDEF:/bin/bash

operator:x:11:0:operator:/ABCDEF:/sbin/nologin

$ sed -n 's/root/ABCDEF/2p' /etc/passwd #将输入流中每一行的第二个root改为ABCDEF

root:x:0:0:ABCDEF:/root:/bin/bash

$ sed -n 's/root/ABCDEF/3p' /etc/passwd #将输入流中每一行的第三个root改为ABCDEF

root:x:0:0:root:/ABCDEF:/bin/bash

$ sed -n 's/root/ABCDEF/gp' /etc/passwd #将输入流中每一行的所有root改为ABCDEF

ABCDEF:x:0:0:ABCDEF:/ABCDEF:/bin/bash

operator:x:11:0:operator:/ABCDEF:/sbin/nologin

将每一行中的第一个单词和随后的分隔符交换位置

[root@myworld ~]# sed -r 's/^([a-Z]+)([^a-Z])/21/' test
:rootx:0:0:root:/root:/bin/bash
:binx:1:1:bin:/bin:/sbin/nologin #上肩号在小括号内或者小括号外不影响结果

将每一行中的最后一个单词和随后的分隔符交换位置

[root@myworld ~]# sed -r 's/([^a-Z])([a-Z]+)$/21/' test
root:x:0:0:root:/root:/binbash/
bin:x:1:1:bin:/bin:/sbinnologin/

原文地址:https://www.cnblogs.com/Icarus1900/p/7688879.html