一、概述:
sed 命令是用来对文件进行编辑用处的,比如替换行中内容,插入行,或者过滤显示等等操作。
格式: sed -options 'handler操作' // 其中handler内含有特殊含义的操作字符分别是 s 替换,p 打印 ,d 删除
二、常见options和操作符含义
2.1 options
-i: 直接进行修改,比如 sed -i '/^s/d' a.txt ,会直接改变原来文件(删除掉s开头的)。
-n : 进行过滤,只有匹配的进行显示,比如 sed -n '2p' a.txt // 只显示第二行
2.2 操作符
s 替换 : s/old/new/ 替换一个 s/old/new/3 替换第三个 s/old/new/g 全局替换
d 删除 : sed -i 1,3d 或者 sed /^[abcd]/d ### 1,3 行或者 // 内的正则表达式
p 打印 : 2,4p // 2-4行 1,$p // 1-结束行
三、基本案例 : (复制一份 /etc/passwd 到test文件 cat /etc/passwd > test)
3.1 输出文本
sed -n 1p test // 打印第1行
sed -n 2,5p test // 打印第五行
sed -n 1,$p test // 打印第一行到最后一行
sed -n '/^[a-b]/p' test // 正则匹配 a-b开头 sed -n /^roo/p test // 正则 roo 开头
sed -n '/^a/p;/^r/p' test // 正则 a或者r开头 注意 ; 可以用来设置多个操作比如 1p;2p;5p
3.2 删除文本
sed '1d' test // 删除第一行 sed '2,5d' test //删除2-5行 【没有加i,原文件不变的】
sed '2d;4d;6d' test //删除2,4,6行 sed '1,$d' test // 全部删除
sed '/^s/d' test // 正则删除。。。
3.3 替换
sed 's/root/java/' test // root 替换成java sed 's/root/java/2' //第二个root替换成java
sed 's/root/java/g' test // root 全部替换java sed -n 's/root/java/pg' test (只打印被替换的行)
四、综合案例
cat test | sed -ne '1,8s/^root/java/gp' // 1,8行,开头root替换成java,并且只打印替换的行。
sed -ne '1,15s/root/&ying/gp' test // 1,15行,root 替换成rootying
sed -r '/^(root|bin)/d' test // 删除掉root或bin开头的。
参考:
https://blog.csdn.net/jsut_rick/article/details/78287737