sed 用法
删除匹配行的上一行和下一行数据
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 行前加:
sed -i '/allow chengyongxu.com/i\allow chengyongxu.cn' the.conf.file
2 行前后:
sed -i '/allow chengyongxu.com/a\allow chengyongxu.cn' the.conf.file
3 给匹配到文件中具体的字符串的下一行插入一行数据:
sed -i '/listen/a\ listen 80\;' filename
4 在匹配到特定字符串的某行后批量插入多行数据:
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
5 给匹配到文件中具体的字符串的上一行插入一行数据:
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
3. 删除匹配行和之后两行
sed -i '/Storage/,+2d' a.txt
生产中nginx配置文件替换字符
sed -i 's/#fastcgi_pass/fastcgi_pass/g;s/fastcgi_pass unix:\/dev\/shm\/php-cgi.sock/#fastcgi_pass
参考:https://blog.51cto.com/wujianwei/2417796