sed 流编辑器(非交互式编辑器) stream editor
(如果在使用sed的过程中发现’‘内的符号或者其他有冲突,可以尝试把’'换成"")
-
工作模式:逐行处理
-
语法:
sed [选项] ‘行的定位 动作’ 文件…
-
选项:
-n:静默输出,关闭模式空间的输出,不会输出未匹配到的行 一般与p命令结合使用
-e:允许进行多项编辑,也就是说对同一行做多次处理、. 可以做多点编辑
-e ‘动作1’ -e ‘动作2’ == ‘动作1;动作2’
-f: 后接sed脚本,指定执行的sed脚本(将模式动作写到文件中)
-r:允许使用扩展正则(r 和 i连用时,i要放到r后面)
-i:直接作用于原文件 没有输出 在使用-i之前一定先不加-i看看效果(如果确定写入文件之后,不要加-n,否则会把修改了的内容覆盖原来所有内容)
-i.bak:修改原文件之前进行备份
换成大写字母:sed 's/[a-z]/\u&/g' /tmp/pass
查看2,4,8行: sed -n '2p,4p,8p' /tmp/pass
查看2到5行:sed -n '2,5p' /tmp/pass
查看奇数行: sed -n '1~2p' /tmp/pass
查看第三行到最后一行:sed -n '3,$p' /tmp/pass
查看除了第三行到最后一行的所有行:sed -n '3,$!p' /tmp/pass
查看除了第二行以外的所有行:sed -n '2!p' /tmp/pass
查看文件中含有root的行:sed -n '/root/p' /tmp/pass
从root开始输出行,直到sh结束输出:sed -nr '/root/,/sh$/p' /tmp/pass
对ip a命令的内容进行处理,筛选出IP:ip a|sed -n '/global/p'|sed 's/^.*inet//g'|sed 's/\/20.*$//g'
将/etc/passwd的第二个root替换:sed 's/root/ROOT/2' /etc/passwd
将/etc/passwd的每行第二个root开始替换:
sed 's/root/ROOT/g2' /etc/passwd
将/etc/redhat-release的文件内容读入到/tmp/pass的第一行后面:sed '1r /etc/redhat-release' /tmp/pass
将/tmp/pass符合条件的行写入到/tmp/a.txt: sed '/root/ w /tmp/a.txt' /tmp/pass
在/tmp/pass的第二行后面追加hello world: sed '2 a hello world' /tmp/pass
在/tmp/pass的第二行前面插入helloworld: sed '2 i hello world' /tmp/pass
一一对应替换:sed 'y/abc/ABC/' /tmp/pass
将/tmp/pass的第二行的内容改为hello world: sed '2 c hello world' /tmp/pass
打印/tmp/pass第二行的下一行: sed -n '2{n;p}' /tmp/pass
打印/tmp/pass前8行后不继续打印: sed '8q' /tmp/pass
- sed的高级应用:
将第一第二行换位:sed '1h;1d;2G' /etc/passwd
将前三行进行倒叙:sed '1h;1d;2G;2h;2d;3G' zheng
将内容倒叙:sed '1{h;d};$!{G;h;d};G' zheng