Могу дать просто несколько советов как упростить работу с текстом.
1) У тебя слишком много всего наворочено в одной строке. Разбей запрос на части.
Например сначала сделай просто SELECT того что ты хочешь удалять. Почему это важно?
Если ты ошибешся и сделаешь слишком либеральный квантор - то удалишь те строки которые
удалять было не надо. И назад дороги нет.
SELECT *
FROM
`sonnik`
WHERE
SUBSTRING_INDEX(SUBSTRING_INDEX(`text`, '\n', find_in_set('женщине или мужчине', `text`)), '\n', -1)
LIKE 'Сонник %'
AND text LIKE '%Сонник %';
И просматривай глазами кандидатов на удаление.
2) Вот это выражение 'женщине или мужчине' слишком строгое. В реальном тексте может
быть многообразие склонений падежей и вообще слова могут быть с переносом через
дефис на новую строку. Поэтому надо искать лемму или основу слова типа "жен".... "муж"
И лучше использовать предикат ILIKE для регистро-независимого сравнения.
3) И как всегда я выражаю своё ворчание по поводу этого тега SQL. Что такое SQL? MySQL? Postgres? Там возможности текстового поиска разные. Есть всякие текстовые индексы и прочие функции FTS.