заменить текст внутри блока кода в файле apache2.conf, используя sed - PullRequest
0 голосов
/ 01 сентября 2018

Я играл с некоторыми хитростями полезной команды sed в linux, чтобы заменить слово текста внутри блока кода в файле apache2.conf. Попробовал поиск уже отвеченных решений на google и stackoverflow. Но те не могли получить помощь.

Вот фрагмент кода в файле apache2.conf.

<FilesMatch "^\.ht">
        Require all denied
</FilesMatch>

Я хочу, чтобы слово, запрещенное внутри блока, было изменено как предоставленное. Как показано ниже,

<FilesMatch "^\.ht">
        Require all granted
</FilesMatch>

Я пытаюсь с помощью команды

sudo sed -i "/<IfModule "^\.ht">/,\@</IfModule>@ s/Require all denied/Require all granted/" /etc/apache2/apache2.conf

и я уверен, что ошибаюсь в двойных кавычках, используемых внутри открывающего тега.

любая помощь будет очень признательна. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

sed предназначен для выполнения s / old / new в отдельных строках, это все . Для всего остального вы должны использовать awk:

$ awk '/<FilesMatch "\^\\\.ht">/{f=1} f{sub(/denied/,"granted")} /<\/FilesMatch>/{f=0} 1' file
<FilesMatch "^\.ht">
        Require all granted
</FilesMatch>

Вышеуказанное просто устанавливает флаг, когда найдена начальная строка, очищает его, когда найдена конечная строка, и изменяет отказ в предоставлении, когда этот флаг установлен.

0 голосов
/ 01 сентября 2018
sed -i '/<FilesMatch "^\\.ht">/,\@</FilesMatch>@ s/Require all denied/Require all granted/' /etc/apache2/apache2.conf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...