Я пытаюсь выяснить, как может команда выполнить поиск и удалить строку из файла .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 ответ1

0

Это должно сделать это:

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

Вывод команды находят привыкает с помощью процесса замещения в то while цикла, а $file Затем grep -vi $file возвращает каждую строку в $file , которая не совпадает (без учета регистра). Он записывает это во временный файл с именем tmp , а затем копирует его поверх оригинальных файлов .htaccess . В целях безопасности вы можете добавить эту дополнительную строку перед командой mv :

mv "$file" "$file".old

Это переименует исходные файлы htaccess в .htaccess.old, если что-то не получится.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .