sed
, будучи текстовым инструментом *nix, основан на строках. Для работы по нескольким линиям необходимо принять определенные меры. Почему не
sed 's/AllowOverride none/AllowOverride all/' file
удовлетворить ваши потребности?
РЕДАКТИРОВАТЬ:или, если вы хотите изменить только строку в этом абзаце «каталога»,
sed '/<Directory "\/var\/www\/html">/,/<\/Directory>/ s/AllowOverride none/AllowOverride all/' file
РЕДАКТИРОВАТЬ:С помощью трех небольших адаптаций ваш собственный скрипт работает корректно:
sed 's/\(Directory \"\/var\/www\/html\">.*?\)AllowOverride none\(.*?<\/Directory>\)/\1AllowOverride all\2/' file
sed -z 's/\(Directory \"\/var\/www\/html\">.*\)AllowOverride none\(.*<\/Directory>\)/\1AllowOverride all\2/' file
^ ^ ^
-z
(--нулевые -данные, отдельные строки символами NUL; ср.man sed
)заставляет sed
игнорировать символы перевода строки, т.е. загружает весь файл. Два ?
, отмеченные знаками вставки, должны исчезнуть. И имейте в виду, что "
не нужно убегать \
(, но это не повредит ).