我有一个示例用例,我想替换" glob"用" url"仅在文件中的某些有限行中。不需要替换文件的其余部分。
/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中打开,然后记下开始和结束行。但正如我所说,这些行号不断变化。
答案 0 :(得分:0)
我可以使用以下命令执行此操作:
# 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$
正则表达式匹配“glob”和行尾的所有内容(如果它以“css”结尾)。
这应该转化为任务文件中的内容:
- replace:
path: /my/path/test_file
regexp: 'W*(/glob)\W*(.*)W*(css)W*(.*)css$'
replace: 'url \"* *.css *\" } # enable css''
这种方法的缺点是你需要为每个css,gif,icos,javascript等替换块。
所以,更好的方法是使用with_items并处理扩展并评论我们正在进行匹配:
- 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' }
我确信正则表达式可以改进,但这适用于我对您的文件的测试。
答案 1 :(得分:-1)
我建议您编写一个脚本来查找包含enable css
,enable gifs
等所有行,以将glob
替换为url
。