在特定的htaccess文件中搜索和替换 - linux

时间:2011-10-17 05:06:08

标签: linux .htaccess sed

我需要将此行添加到位于/home/*/site/assets/.htaccess的每个.htaccess文件中 其中*可以是任何数量的深度目录

我需要找到这个文本

RewriteRule ^(.*)$ /site/assets/sym/$1 [L,NS]

并在其上方添加一行,或将其替换为

RewriteCond %{REQUEST_URI} !^/site/assets/sym
RewriteRule ^(.*)$ /site/assets/sym/$1 [L,NS]

我已经在网上看了site,但我不清楚如何处理

  1. 生成我要编辑的文件列表(因此找到与此路径匹配的所有文件:/ home / * / site / assets / .htaccess)
  2. 在替换文字中添加换行符
  3. 任何人都可以建议一个能够清楚解释它的资源,或者告诉我们,如果我正在寻找这份工作的正确工具,请告诉我吗?

    我的操作系统是Cent OS 5.5,我正在运行LAMP服务器,如果这有很大的不同,apache 2。

    由于

1 个答案:

答案 0 :(得分:2)

#!/bin/bash

类似的东西:

for dir in `find /home -type d | grep 'site/assets'`
do
    htaccess="$dir/.htacess";
    sed -ibak -e 's@RewriteRule \^\(.*\)\$ /site/assets/sym/\$1 \[L,NS\]@RewriteCond %{REQUEST_URI} !^/site/assets/sym\n\0@' $htaccess
done

在我的包装盒上:

sed -e 's@RewriteRule \^\(.*\)\$ /site/assets/sym/\$1 \[L,NS\]@RewriteCond %{REQUEST_URI} !^/site/assets/sym\n\0@' test
Foobarlol

RewriteCond %{REQUEST_URI} !^/site/assets/sym
RewriteRule ^(.*)$ /site/assets/sym/$1 [L,NS]
RewriteRule ^(.*)$ /site/assets/test/$1 [L,NS]

Bleh

test

Foobarlol

RewriteRule ^(.*)$ /site/assets/sym/$1 [L,NS]
RewriteRule ^(.*)$ /site/assets/test/$1 [L,NS]

Bleh