前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell实战(一):sed命令小结

shell实战(一):sed命令小结

作者头像
create17
发布2019-05-06 14:52:20
1.9K0
发布2019-05-06 14:52:20
举报
文章被收录于专栏:大数据实战演练

每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。

放弃不难,但坚持很酷~

一、简介

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

命令格式

代码语言:javascript
复制
sed [options] 'command' file(s)

二、sed命令

  • a :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(当前行的下一行)。
  • d :删除,删除选择的行。
  • i :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(当前行的上一行).
  • p :打印,通常 p 会与参数 sed -n 一起运行.
  • s :替换,替换指定字符,通常与正则表达式联用。

三、使用场景

1. sed 增加(i/a)

指定行号添加内容

代码语言:javascript
复制
# 在第三行的上方添加一行字符串
sed -i "3i\test123" aa.txt
# 在第三行的下方添加一行字符串
sed -i "3a\ceshi456" aa.txt

匹配行之后在其上方/下方添加内容

代码语言:javascript
复制
# 在vrrp_instance VI_1下方插入内容
sed -i '/vrrp_instance VI_1/a\    notify_master \"/etc/keepalived/xmha/keepalived.sh master\"\n    notify_backup \"/etc/keepalived/xmha/keepalived.sh backup\"\n    track_script {\n       check\n    }' keepalived.conf
# 在vrrp_instance VI_1上方插入内容
sed -i '/vrrp_instance VI_1/i\vrrp_script check {\n    script \"/etc/keepalived/xmha/checkServer.sh\"\n    interval 10\n}\n' keepalived.conf

解读:

  • a:代表apend,是在匹配行追加的意思。字母前面跟行号或匹配的内容。
  • i:代表insert,是在匹配行插入的意思。字母前面跟行号或匹配的内容。
  • \n:换行,可通过该参数插入多行内容。
  • \:转义符。
2. sed 输出(p)
代码语言:javascript
复制
# 输出文件所有内容
sed -n '1,$p' /etc/hosts
# 将每行内容放到一行上进行展示,每行内容以逗号进行分隔。
sed ':t;N;s/\n/,/;b t' /etc/hosts
# 输出第二行到第四行之间三行的内容
sed -n "2,4p" /etc/hosts

解读:

$p为最后一行的意思,'1,$p',是选择打印第一行到最后一行。必须用单引号表示,双引号会报错。

3. sed 替换(s)
  • 全文匹配替换
代码语言:javascript
复制
sed -i "s/http:\/\/.*/http:\/\/$ip:$1\";/g" app.js

app.js的局部内容

代码语言:javascript
复制
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://10.6.6.71:9200";

解读:

动态替换全文匹配http://行之后的内容。\为转义符,用来转义/.*代表所有内容。

  • 指定行号匹配替换
代码语言:javascript
复制
sed -i "5s/port:.*/port: $2,/g" ../Gruntfile.js

Gruntfile.js的局部内容

代码语言:javascript
复制
connect: {
        server: {
                options: {
                        port: 9100,
                        base: '.',
                        keepalive: true
                }
        }
}

解读:

替换第4行的匹配的port之后的内容,.*代表所有内容。

4. sed 删除(d)
代码语言:javascript
复制
sed -i "/notify_master \"\/etc\/keepalived\/xmha\/keepalived.sh master\"/,+4d" keepalived.conf

# 远程主机删除文件内容
ssh 10.6.6.72 "sed -i '/notify_master \"\/etc\/keepalived\/xmha\/keepalived.sh master\"/,+4d' /etc/keepalived/keepalived.conf"

# 有特殊符号的行应该如何匹配删除
sed -i "/.*30 1 \* \* \* root sh \/etc\/keepalived\/xmha\/checkFile.sh/d" /etc/crontab

解读:

如果匹配字符串中有*/等特殊符号时,就需要转义符\来转义。

四、总结

本篇文章主要描述了sed命令的基本用法,如何对文件内容进行增删改查,并附上了我自己工作上遇到的小例子。当然,sed命令博大精深,我不可能每个用法都能兼顾,如果还想继续拓展的话,可以访问http://man.linuxde.net/sed学习sed更多用法。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据实战演练 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、简介
  • 二、sed命令
  • 三、使用场景
    • 1. sed 增加(i/a)
      • 2. sed 输出(p)
        • 3. sed 替换(s)
          • 4. sed 删除(d)
          • 四、总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档