Я бы предложил использовать awk и установить флаг при достижении ключевого слова:
awk '/Keyword/ { stop = 1 } stop || !/^[[:blank:]]*([;#]|$)/' file
Установите stop
в значение true, если строка содержит Keyword
. Выполните действие по умолчанию (выведите строку), когда stop
равно true или когда строка не соответствует регулярному выражению. Регулярное выражение соответствует строкам, чей первый непустой символ - точка с запятой или хэш, или пустые строки. Это немного отличается от вашего состояния, но я думаю, что делает то, что вы хотите.
Команда выводит на стандартный вывод, поэтому вы должны перенаправить на новый файл, а затем перезаписать оригинал, чтобы выполнить «редактирование на месте»:
awk '...' input > tmp && mv tmp input