linux命令sed

sed:stream editor,流式编辑器的意思。

    sed命令的格式:

            1.sed  [选项]   '命令'   输入文件,比如sed  -n '1p' a.txt

            2.输入源 | sed  [选项]   '命令'  ,比如cat a.txt| sed '1a haha'

    常用的选项:

 -n∶不加-n,处理文件的内容都会打印在屏幕上,加上 -n 参数后,则只有经过sed 特殊处理的那一行才会被列出来。
 -e∶可以让sed支持多重编辑
 -i∶直接对当前处理的文件进行修改,而不是打印在屏幕上

常用的命令:

a:append附加的意思,如'1a haha'表示在要处理文件的第一行后边加上haha
i:insert的缩写,插入的意思,跟append的区别在于会插入在指定行的前面
d:delete的缩写,删除的意思,如'3d' 表示删除第三行
c:replace的缩写,替换的意思,不支持正则表达式,如'1,$c haha'表示把正在处理的文件的第一行到最后一行用haha替换
s:支持正则表达式,格式是'1s/要被替换的字符串/新的内容/[g]','1,2s/html/HTML/'表示把第1行和第2行里面的html用HTML来替换
p:print,'5p' 打印第5行

理论看了还是迷糊,看几个例子就豁然开朗了。

我现在有如下文档:

[root@node78 ~]#cat h5.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
</body>
</html>

一、a命令,在1行后面插入一行,内容是“haha”,输入sed  '1a haha' h5.html:

image.png

二、i命令,在1行前面插入一行,内容是“haha”,输入sed  '1i haha' h5.html:

image.png

三、d命令,删除第3行吧,输入sed  '3d' h5.html:

image.png

四、把第一行到第3行替换为haha,输入sed  '1,3c  haha' h5.html:

image.png

五、把第一行到最后一行里面的字母和数字都替换为#,这个没办法在用c命令了,因为c命令不支持正则表达式,我们用支持正则的s命令,输入命令sed '1,$s/\w/#/g' h5.html,这里解释一下,在sed的命令里面的$表示最后一行,g表示全部替换:

image.png

六、打印第4行的内容,如果我们使用sed '4p' h5.html,因为sed默认就是打印源文档经过命令处理后的结果,所以这里会打印全部,我们如果只想看第四行,那就要加上-n选项,表示只打印经过了命令处理的行,这里所谓经过命令处理就是指"4p"处理了,因此常常把-n和p连用,表示我们只看我们打印的行:

[root@node78 ~]#sed -n '4p' h5.html
<meta charset="utf-8">

七、在第一行前边和后边分别插入haha,你怎么办?你可以先执行sed  '1i haha' h5.html,再执行sed  '1a haha' h5.html,但是这样还是不能满足同时插入的效果,它们分开执行后只能看到各自的效果,因为sed如果不加-i真正修改文件的话,sed命令并不改变文件内容,那怎么做到同时插入呢?这时候要用到-e选项,表示可以多重编辑,就是多次编辑的意思:

image.png

八、上边说了那么久,做了那么多,h5.html的内容纹丝未动,一点也没有改变,如果想要上边的操作真实的对h5.html文件生效的话,就需要使用-i选项:

[root@node78 ~]#cat h5.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
</body>
</html>
[root@node78 ~]#sed -i -e '3i haha'  -e '3d' h5.html
[root@node78 ~]#cat h5.html
<!doctype html>
<html>
haha
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
</body>
</html>
[root@node78 ~]#

观察h5.html前后的内容可以看到,加了-i选项确实真实的改变了它的内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值