x sed substituir padrão com caractere de nova linha

0

Estou tentando substituir um "AllowOverride None" específico por "AllowOverride All" no arquivo httpd.conf.

Dado que o arquivo tem várias linhas com o mesmo padrão, pensei em fazer um padrão multilinha para substituí-lo ... A menos que o sed tenha uma maneira de escolher quando ele deve substituir o padrão.

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
AllowOverride None

para:

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
AllowOverride All

Eu estava substituindo linhas simples por:

sudo sed -i 's|DocumentRoot "/var/www/html"|DocumentRoot "/var/www/html/test"|' /etc/httpd/conf/httpd.conf

Mas não sei como fazer isso se houver várias linhas

Obrigado

    
por Radizzt 06.10.2017 / 18:18

2 respostas

1

sed tem várias maneiras de fazer isso. Por exemplo, com o comando c hange:

sed --in-place '/^AllowOverride All/c\
AllowOverride None\n' httpd.conf

Ou, com um uso melhor de s ubstitute:

sed --in-place '/^AllowOverride/s/All/None/'

O último pode ser transliterado como "Em linhas que começam com AllowOverride , substitua a primeira instância de All por None '.

    
por 06.10.2017 / 18:49
0

No final, você pode especificar um número de linha para substituir uma string:

sudo sed -i '151s/AllowOverride None/AllowOverride All/' httpd.conf

funciona perfeitamente.

    
por 06.10.2017 / 18:28