如何使用sed在httpd.conf指定Directory区块结束前插入指定文本
解决方案
方案1:直接修改httpd.conf(推荐)
无需管道,单个sed命令即可完成匹配区块+插入内容的操作,同时自动生成备份避免配置出错:
sed -i.bak '/<Directory "\/var\/www\/html">/,/<\/Directory>/{ /<\/Directory>/i\ # Limit HTTP methods\ <LimitExcept GET POST OPTIONS>\ Require all denied\ </LimitExcept> }' httpd.conf
命令说明:
-i.bak参数会在修改原文件前生成名为httpd.conf.bak的备份,确认修改无误后可自行删除备份文件;不需要备份的话直接改为-i即可- 地址匹配规则和你当前提取区块的规则完全一致,仅对
/var/www/html对应的Directory区块生效 - 匹配到区块结束标签
</Directory>时,用i命令在该行之前插入指定的多行配置,插入内容的每一行末尾需加反斜杠标识换行(反斜杠后不能加空格)
方案2:管道传递实现(匹配你预期的操作逻辑)
如果需要先提取区块再做插入,用管道拼接两个sed即可:
sed -n '/<Directory "\/var\/www\/html">/,/<\/Directory>/p' httpd.conf | sed '/<\/Directory>/i\ # Limit HTTP methods\ <LimitExcept GET POST OPTIONS>\ Require all denied\ </LimitExcept> '
结果验证
操作完成后可以用你原来的提取命令确认插入效果:
sed -n '/<Directory "\/var\/www\/html">/,/<\/Directory>/p' httpd.conf
兼容说明
如果你使用的是macOS系统自带的sed,-i参数需要额外添加空字符串参数,将sed -i.bak改为sed -i '' .bak即可正常运行。
内容的提问来源于stack exchange,提问作者Onebiteightbytes
相关产品推荐
相关产品推荐

