Apache 仅在特定行中替换文件中的内容
我有一个示例用例,其中我只想在文件中有限的几行中将“glob”替换为“url”。文件的其余部分不需要替换Apache 仅在特定行中替换文件中的内容,apache,ansible,Apache,Ansible,我有一个示例用例,其中我只想在文件中有限的几行中将“glob”替换为“url”。文件的其余部分不需要替换 /publishfarm { # client headers which should be passed through to the render instances # (feature supported since dispatcher build 2.6.3.5222) /clientheaders
/publishfarm
{
# client headers which should be passed through to the render instances
# (feature supported since dispatcher build 2.6.3.5222)
/clientheaders
{
$include "clientheaders.any"
}
# hostname globbing for farm selection (virtual domain addressing)
/virtualhosts
{
$include "publish-vhosts.any"
}
# the load will be balanced among these render instances
/renders
{
$include "publish-renders.any"
}
# only handle the requests in the following acl. default is 'none'
# the glob pattern is matched against the first request line
/filter
{
# deny everything and allow specific entries
/0001 { /type "deny" /glob "*" }
# open consoles
# /0012 { /type "allow" /glob "* /crx/*" } # allow content repository
# /0013 { /type "allow" /glob "* /system/*" } # allow OSGi console
# allow non-public content directories
# /0021 { /type "allow" /glob "* /apps/*" } # allow apps access
# /0022 { /type "allow" /glob "* /bin/*" }
# /0024 { /type "allow" /glob "* /libs/*" }
# /0025 { /type "deny" /glob "* /libs/shindig/proxy*" } # if you enable /libs close access to proxy
# /0026 { /type "allow" /glob "* /home/*" }
# /0027 { /type "allow" /glob "* /tmp/*" }
# /0028 { /type "allow" /glob "* /var/*" }
/0023 { /type "allow" /glob "* /content*" } # disable this rule to allow mapped content only
# enable specific mime types in non-public content directories
/0041 { /type "allow" /glob "* *.css *" } # enable css
/0042 { /type "allow" /glob "* *.gif *" } # enable gifs
/0043 { /type "allow" /glob "* *.ico *" } # enable icos
/0044 { /type "allow" /glob "* *.js *" } # enable javascript
/0045 { /type "allow" /glob "* *.png *" } # enable png
/0046 { /type "allow" /glob "* *.swf *" } # enable flash
/0047 { /type "allow" /glob "* *.svg *" } # enable SVG
/0048 { /type "allow" /glob "* *.woff *" } # enable woff
/0049 { /type "allow" /glob "* *.ttf *" } # enable ttf
/0050 { /type "allow" /glob "* *.eot *" } # enable eot
/0051 { /type "allow" /glob "* *.jpg *" } # enable jpg
# enable features
/0061 { /type "allow" /glob "POST /content/[.]*.form.html" } # allow POSTs to form selectors under content
/0062 { /type "allow" /glob "* /libs/cq/personalization/*" } # enable personalization
/0063 { /type "allow" /glob "POST /content/[.]*.commerce.cart.json" } # allow POSTs to update the shopping cart
# deny content grabbing
/0081 { /type "deny" /glob "GET *.infinity.json*" }
/0082 { /type "deny" /glob "GET *.tidy.json*" }
/0083 { /type "deny" /glob "GET *.sysview.xml*" }
/0084 { /type "deny" /glob "GET *.docview.json*" }
/0085 { /type "deny" /glob "GET *.docview.xml*" }
/0086 { /type "deny" /glob "GET *.*[0-9].json*" }
/0087 { /type "deny" /glob "GET *.feed.xml*" }
# /0088 { /type "allow" /glob "GET *.1.json*" } # allow one-level json requests
我只想在这些块中用url替换glob,而不是整个文件。
我想替换的内容是
# enable specific mime types in non-public content directories
/0041 { /type "allow" /glob "* *.css *" } # enable css
/0042 { /type "allow" /glob "* *.gif *" } # enable gifs
/0043 { /type "allow" /glob "* *.ico *" } # enable icos
/0044 { /type "allow" /glob "* *.js *" } # enable javascript
/0045 { /type "allow" /glob "* *.png *" } # enable png
/0046 { /type "allow" /glob "* *.swf *" } # enable flash
/0047 { /type "allow" /glob "* *.svg *" } # enable SVG
/0048 { /type "allow" /glob "* *.woff *" } # enable woff
/0049 { /type "allow" /glob "* *.ttf *" } # enable ttf
/0050 { /type "allow" /glob "* *.eot *" } # enable eot
/0051 { /type "allow" /glob "* *.jpg *" } # enable jpg
这里的问题是行号不是固定的。我怎样才能在ansible中实现这一点
我曾经这样做过:在这个文件中41,51s/glob/url在vim中打开,然后注意开始和结束行。但正如我所说,这些行号一直在变化。我建议您可以编写一个脚本来定位所有具有
启用css
、启用GIF
等功能的行号。将glob
替换为url我可以通过以下命令执行此操作:
# ansible 127.0.0.1 -m replace -a "path='/my/path/test_file' regexp='W*(/glob)\W*(.*)W*(css)W*(.*)css$' replace='url \"* *.css *\" } # enable css'"
W*(/glob)\W*(*)W*(css)W*(*)css$
regex匹配“glob”和以“css”结尾的行之间的所有内容
应在任务文件中转换为以下内容:
- replace:
path: /my/path/test_file
regexp: 'W*(/glob)\W*(.*)W*(css)W*(.*)css$'
replace: 'url \"* *.css *\" } # enable css''
这种方法的缺点是,您可能需要为每个css、GIF、ICO、javascript等都使用替换块
因此,更好的方法是与_项一起使用,并处理扩展和对我们正在进行的匹配的评论,如下所示:
- hosts: myhostgroup
tasks:
- replace:
path: /my/path/test_file
regexp: 'W*(/glob)\W*(.*)W*({{ item.extension }})W*(.*){{ item.comment }}$'
replace: 'url "* *.{{ item.extension }} *" } # enable {{ item.comment }}'
with_items:
- { extension: 'css', comment: 'css' }
- { extension: 'gif', comment: 'gifs' }
- { extension: 'ico', comment: 'icos' }
- { extension: 'js', comment: 'javascript' }
- { extension: 'png', comment: 'png' }
- { extension: 'swf', comment: 'flash' }
- { extension: 'svg', comment: 'SVG' }
- { extension: 'woff', comment: 'woff' }
- { extension: 'ttf', comment: 'ttf' }
- { extension: 'eot', comment: 'eot' }
- { extension: 'jpg', comment: 'jpg' }
我相信正则表达式可以改进,但这对我在您的文件中的测试起到了作用。如果我的答案是回答您的问题,如果您能这样标记,我将不胜感激。如果没有,我愿意了解如何改进。