shell实战(一):sed命令小结
一、简介
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
命令格式
1 | sed [options] 'command' file(s) |
二、sed命令
- a :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(当前行的下一行)。
- d :删除,删除选择的行。
- i :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(当前行的上一行).
- p :打印,通常 p 会与参数 sed -n 一起运行.
- s :替换,替换指定字符,通常与正则表达式联用。
三、使用场景
1. sed 增加(i/a)
指定行号添加内容
1 | 在第三行的上方添加一行字符串 |
匹配行之后在其上方/下方添加内容
1 | 在vrrp_instance VI_1下方插入内容 |
解读:
- a:代表apend,是在匹配行追加的意思。字母前面跟行号或匹配的内容。
- i:代表insert,是在匹配行插入的意思。字母前面跟行号或匹配的内容。
- \n:换行,可通过该参数插入多行内容。
- \:转义符。
2. sed 输出(p)
1 | 输出文件所有内容 |
解读:
$p
为最后一行的意思,'1,$p'
,是选择打印第一行到最后一行。必须用单引号表示,双引号会报错。
3. sed 替换(s)
- 全文匹配替换
1 | sed -i "s/http:\/\/.*/http:\/\/$ip:$1\";/g" app.js |
app.js的局部内容
1 | this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://10.6.6.71:9200"; |
解读:
动态替换全文匹配http://
行之后的内容。\
为转义符,用来转义/
。.*
代表所有内容。
- 指定行号匹配替换
1 | sed -i "5s/port:.*/port: $2,/g" ../Gruntfile.js |
Gruntfile.js的局部内容
1 | connect: { |
解读:
替换第4行的匹配的port
之后的内容,.*
代表所有内容。
注意:
首先要搞清楚,转义符 \ 的作用是消除有特殊含义字符的特殊意义,使其还原为普通字符。
其实 sed 的替换命令格式不一定要是 s/…/…/,下面这样也都可以:
- s#…#…#
- s_……
即命令 s 后可以跟任意字符,只要跟替换内容不重复即可。这样,路径里的 / 就不再需要转义了。
4. sed 删除(d)
1 | sed -i "/notify_master \"\/etc\/keepalived\/xmha\/keepalived.sh master\"/,+4d" keepalived.conf |
解读:
如果匹配字符串中有*
、/
等特殊符号时,就需要转义符\
来转义。
四、总结
本篇文章主要描述了sed命令的基本用法,如何对文件内容进行增删改查,并附上了我自己工作上遇到的小例子。当然,sed命令博大精深,我不可能每个用法都能兼顾,如果还想继续拓展的话,可以访问http://man.linuxde.net/sed学习sed更多用法。
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。
白嫖不好,创作不易。各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !
原文作者: create17
原文链接: https://841809077.github.io/2019/04/21/Linux/shell实战(一)sed命令小结.html
版权声明: 转载请注明出处(码字不易,请保留作者署名及链接,谢谢配合!)