Во-первых, я согласен с комментариями выше: Не используйте sed
для восстановления после взлома. Вы всегда будете удивляться, если вы что-то пропустили. Восстановить из резервной копии, и точка.
Тем не менее, буквальный вопрос, который вы задали, как удалить длинную строку везде, где она появляется, не экранируя каждый специальный символ, несколько проще обработать.
Я делаю некоторые выводы / предположения из вашего вопроса, которые вы на самом деле не указали напрямую:
Если вышеприведенные предположения верны, выполните следующие действия:
hackline.txt
. Поместите этот уровень выше каталога, который вы собираетесь обрабатывать. Скопируйте весь каталог в случае ошибок.
cp -a mydir mydircopy
Выполните следующий цикл для вашего каталога (или копии), чтобы удалить все экземпляры hackline:
cd mydir
для f в * ; сделать
[-f "$ f"] && [-r "$ f"] || продолжить
grep -vxFf ../hackline.txt "$ f"> "$ f.fixed" &&
mv - "$ f.fixed" "$ f"
готово
Суть в том, что вы используете hackline.txt
как список фиксированных строк, которые должны соответствовать всей строке, затем вы используете grep
, чтобы получить только те строки, которые не соответствуют этот список строк.
-x
означает «всю строку»; -F
означает «фиксированная строка, а не регулярное выражение»; -v
инвертирует поиск; -f
принимает список шаблонов в файле.
Если каталог вашего веб-сайта является иерархическим, а не плоским (что на самом деле весьма вероятно), вы можете использовать find
вместо цикла for:
find mydir -type f ! -name \*.fixed -exec sh -c 'grep -vxFf ../hackline.txt "$1" > "$1.fixed"' sh {} \;
find mydir -type f -name \*.fixed -exec sh -c 'mv -- "$1" "${1%.fixed}"' sh {} \;
Затем используйте рекурсивный diff
чтобы убедиться, что все в порядке:
diff -r mydircopy mydir
Чрезвычайно поздний ответ, но, возможно, все еще кому-то полезен:
Функции, которые вам нужны: windows $ W.swapMaster . W.focusDown
, где: swapMaster
и focusDown
импортированы из XMonad.StackSet
:
import qualified XMonad.StackSet as W
Минимальный xmonad.hs
:
import XMonad
import XMonad.Util.EZConfig
import qualified Data.Map as M
import qualified XMonad.StackSet as W
main = xmonad $ def `additionalKeysP` myKeys
myKeys = [ ("M-a", windows $ W.swapMaster . W.focusDown )]
Здесь привязка клавиш Mod-a
.