我试图弄清楚如何通过命令搜索并删除 .htaccess 文件中的行。下面一行是我想要搜索和删除的行
RedirectMatch \.(dynamiccontent|pl|plx|perl|cgi|php|php4|php4|php6|php3|shtml)$ http://server.linux.com/cgi-sys/movingpage.cgi
请注意此行有特殊字符
这是查找代码的命令
find /home*/*/public_html/ -mindepth 1 -iname "\.htaccess" -type f -exec grep -Hi "RedirectMatch*" '{}' \;
但这只能找到而不是找到并删除 .htaccess 文件中的行
我如何修改命令来查找并删除我提到的行?
答案1
这应该可以做到:
while IFS= read -r -d '' file; do
grep -iv "RedirectMatch*" $file>tmp
mv tmp $file
done < <(find /home*/*/public_html/ -mindepth 1 -iname "\.htaccess" -type f -print0)
rm tmp
find 命令的输出被流程替代在while
循环中,如$file
。然后返回该循环grep -vi $file
中的每一行$file
没有匹配(忽略大小写)。它会将其写入名为临时文件,然后将其复制到原件上.htaccess文件。为了安全起见,你可以在命令前添加以下行mv
:
mv "$file" "$file".old
这会将原始 htaccess 文件重命名为 .htaccess.old,以防出现问题。