发布时间:2020-03-30 18:51:35来源:阅读:
带着需要使用sed来对nginx配置文件进行操作的强烈需求,于是开始了学习sed的高级应用。虽然之前也一直在用sed,但也只是接触到了s替换命令,其它高级的命令没用到,所以没有动力去学。一直觉得要学到点东西,前提是你现在有一问题,需要用到这个技术来解决,而且有强烈的渴望要把这个问题解决,这时候你学习这项技术会事半功倍。否则学习起来会非常的枯燥无味,效率低,甚至会放弃。下面是我最近学sed得出的成果,备忘一下,以防失忆。
一、列出所有虚拟的server_name和对应的root
sed -n " /servers*{/{ H :loop n;H /}/{ s/}//;x;H s/.*server_names*([^;]*);.*/1/p x s/.*roots*([^;]*);.*/1/p s/.*//g;x } /{/!b loop :loop1 n;H /}/!b loop1 b loop } " nginx-www.centos.bz.conf
二、删除指定server_name的虚拟主机
domain="www.centos.bz" sed -i -n " /servers*{/{ H :loop n;H /}/{ s/}//;x /.*server_names*$domain.*/d p;d } /{/!b loop :loop1 n;H /}/!b loop1 b loop } p " nginx-www.centos.bz.conf
代码有点多,就不具体分析了,具体说下如何找出server {} 代码块。
代码分析:
1、首先先关闭自动打印功能,即-n选项,因为下面会用到n命令,会自动打印,所以添加-n之后,使用n命令就不会自动打印了,需要打印时,使用p命令。
2、匹配 server {,如果匹配到,则把pattern space的内容添加到hold space,然后进入loop循环,执行n命令(n命令不必进入新的循环读取下一步到pattern space),再用H附加到hold space
3、判断是否找到代码块结束符},如果找到,进入server {}代码块处理阶段,处理完之后,进入下一个循环,继续找出下一个server{}。
4、如果找不到,再判断是否找到{,如果没有找到,进入loop循环
5、如果找到了{,表示存在if {},或者location {},则必要找到两个}才算是完整的server代码块。此时进入loop1循环,n命令读取下一行,附加到hold space。
6、再判断是否找到},如果没有找到,继续loop1循环,如果找到了,还需要一个},所以跳到loop循环。
7、如此循环下来,直接找到完整的server代码块。
关键的几点提示:
1、n命令是直接清空pattern space,并读取下一行到pattern space,而不需要进入新的循环。在这里的作用是,因为要把pattern space的内容附加到hold space,所以每读取一行,必需先清空pattern space,然后再附加到hold space,这样hold space才不会出现重复内容。要达到清空pattern space,读取下一行,进入下一循环可以做到,但进入下一循环后,必需重新匹配server {,而下一行肯定无法匹配,所以就达不到累积的效果。
2、hold space在这里很重要,它的内容来自pattern space对其进行附加操作。累积到完整的server代码块时,再与pattern space进行交换,交换之前必需把pattern space清空,这样交换后,hold space才能为空,为累积出下一个server代码块做准备。
最后还是建议使用sed的debug工具sedsed查看pattern space和hold space的变化。http://aurelio.net/projects/sedsed/
顽固文件删除工具(数据擦除软件) v1.9.2 免费版
1MB
虚拟声卡(声卡驱动程序) V2.1 中文版
1.97MB
虚拟视频软件(虚拟视频媒体播放器) V8.0.7.2 电脑版
24.94 MB
MVBOX虚拟视频(音乐播放软件) V4.6.8 破解版
19.04 MB
Uninstall Tool(卸载删除工具) v3.5 破解版
3.63 MB
VirtualBox虚拟机下载
108.47MB
centos(linux操作系统) 6.4 最新版
3.85GB
d3d9(系统文件)2021 绿色版
530.9K
daemon tools v3.47(虚拟光驱工具)中文版
485KB
fastcopy(文件快速复制工具)V3.7.0 免费版
1.5M
pdf合并软件(pdf文件合并工具)v1.11 官方版
209.0M
swf播放器(SWF文件播放器)v6.0.0.3 官方版
2.5MB
win7虚拟光驱(虚拟光驱应用软件)V1.0 绿色版
1.3M
windows server 2016(服务器操作系统)中文版
5.18G
winmount(虚拟光驱工具)v3.4.1020 免费版
3.87MB
数据安全删除工具下载
242.34K
烁光PDF转换器(文件格式转换工具) v1.2.2.0 免费版
42.46 MB
酒精120%(虚拟光盘刻录软件)v2.1.0.20601 破解版
38.9M
360杀毒
36.93 MB
Hardwipe下载
9.3MB
2020-03-18
关于QQ视频时黑屏的解决案例
Linux下软件包的安装及卸载
硬盘保护系统(EDU)对应版本支持的操作系统类型汇总
mSATA与mini pci-e的区别
B305一体机在Windows XP系统下各个驱动安装方法及所需下载的驱动编号
Windows 7系统下,日文输入法无法正常使用
SureSCSI 212盘柜,如何标识故障硬盘?
Office 365版本如何试用?
Nim 发布 2019 年度社区调查报告:大家都用上了 1.0 版本