Iamliutt的个人空间 https://blog.eetop.cn/1760774 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

用sed命令在匹配的字符所在行前后新插入(删除)一行内容

热度 10已有 4348 次阅读| 2022-2-11 10:12 |个人分类:linux命令整理|系统分类:芯片设计

原文转载自:https://blog.csdn.net/baping8015/article/details/100952773

https://blog.csdn.net/weixin_34417200/article/details/92202812


感谢大佬!

课题一:删除匹配行的上一行和下一行数据

1.删除匹配行的上一行和下一行:

sed -i -e '/string/{n;d}' -e '$!N;/\n.*string/!P;D' filename

2.删除匹配到特定字符所在行的上一行

sed -i -e '$!N;/\n.*string/!P;D' filename

3.删除匹配到特定字符所在行的下一行

sed -i -e '/string/{n;d}' filename

4.sed中使用变量,删除匹配行的上一行和下一行:

AA=string     #变量指定匹配字符串
sed -i -e '/'"$AA"'$/{n;d}' -e '$!N;/\n.*'"$AA"'$/!P;D' file

课题二:匹配到字符串所在的行的上一行或者是下一行插入一条数据

a 追加内容 sed ‘/匹配词/a\要加入的内容’ example.file(将内容追加到匹配的目标行的下一行位置)
i 插入内容 sed ‘/匹配词/i\要加入的内容’ example.file 将内容插入到匹配的行目标的上一行位置)

示例:
#我要把文件的包含“chengyongxu.com”这个关键词的行前或行后加入一行,内容为“allow chengyongxu.cn”

1   #行前加
2   sed -i '/allow chengyongxu.com/i\allow chengyongxu.cn' the.conf.file
3   #行前后
4   sed -i '/allow chengyongxu.com/a\allow chengyongxu.cn' the.conf.file

给匹配到文件中具体的字符串的下一行插入一行数据:

sed -i '/listen/a\   listen 80\;'   filename

在匹配到特定字符串的某行后批量插入多行数据:

方法①:
sed -i '/syncsendmsg.php/a\#013.平台广告小时计划每5分钟写入主平台 xxx 2019-07-04\n*/5 * * * * /usr/bin/php
/data/cron/ptask/countjs_syc_plan_main.php\n*/5 * * * * /usr/bin/php /data/cron/ptask/countjs_syc_plan_h_main.php'  filename

方法②:匹配字符串,然后在匹配的行的下一行插入多行文本,该文本预先写入某个文件:
sed -i '/abcd/r /tmp/otherfile' /var/www/file.conf 
这里的/tmp/otherfile是你要添加的文件内容,file.conf就是你要修改的文件

给匹配到文件中具体的字符串的上一行插入一行数据:

sed -i '/listen/i\   listen 80\;' filename

课题三:删除匹配到指定字符串所在的行的上一行或者是下一行数据

1、删除指定行的上一行

sed -i -e :a -e '$!N;s/.*\n\(.*ServerName abc.com\)/\1/;ta' -e 'P;D' file
例如:
[root@VM_82_178_centos vhost]# grep listen m.afpfpm.cn443.conf listen 80;
listen       443;
删除   listen       443;这一行的上行内容:    listen 80;
sed -i -e :a -e '$!N;s/.*\n\(.*listen       443\)/\1/;ta' -e 'P;D' m.afpfpm.cn443.conf

2、删除指定字符串之间的内容

sed -i '/ServerName abc.com/,/\/VirtualHost/d' $file
http://www.linuxso.com/shell/17542.html

生产中nginx配置文件替换字符

sed -i 's/#fastcgi_pass/fastcgi_pass/g;s/fastcgi_pass  unix:\/dev\/shm\/php-cgi.sock/#fastcgi_pass  unix:\/dev\/shm\/php-cgi.sock/g'  m.6saeq.cn443.conf




点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 8

    周排名
  • 11

    月排名
  • 0

    总排名
  • 1

    关注
  • 29

    粉丝
  • 11

    好友
  • 116

    获赞
  • 24

    评论
  • 6636

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-4-29 18:46 , Processed in 0.013526 second(s), 9 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部