Faça o trabalho sed através de 2 ou mais linhas (todas as linhas neste caso) em vez de apenas uma [duplicata]

0

Eu uso o Ubuntu 16.04 com o Bash e devo ativar o http2 para um site específico que eu tenho em um ambiente Nginx.

Nativamente, o utilitário sed faz seu processamento de texto na primeira instância na primeira linha relevante (usando o argumento g para processar todas as instâncias na primeira linha relevante), mas desejo fazer uma operação particular em 2 ou mais linhas (todas as linhas, na verdade).

Eu dei uma olhada em man sed e encontrei o argumento -l que permite que você especifique o número de linhas para trabalhar (se eu entendi correto), mas eu desejo trabalhar em todas as linhas, sem depender de uma quantidade específica de linhas.

O caso particular que estou tendo é que eu tente unificar essas duas operações sed em uma:

s_a="/etc/nginx/sites-available/"
$domain="example.com"
sed -i "s/listen 443 ssl default_server;/listen 443 ssl http2 default_server;/" $s_a/$domain.conf
sed -i "s/listen [::]:443 ssl default_server;/listen [::]:443 ssl http2 default_server;/" $s_a/$domain.conf

Eu poderia unificar as duas operações sed para algo como:

sed -i "s/443 ssl default_server/443 ssl http2 default_server/" $s_a/$domain.conf

Eu assumo que a maneira mais segura de cobrir todas as linhas relevantes em uma operação de linha única conveniente é usar algum argumento, mas não sei se isso pode ser feito com o argumento -l , se de alguma forma, ou Eu devo usar o regex.

    
por user9303970 05.03.2018 / 11:36

1 resposta

4

Parece haver um erro aqui, porque:

sed -i "s/443 ssl default_server/443 ssl http2 default_server/" $s_a/$domain.conf

funcionará bem; ele substituirá a primeira ocorrência “443 ssl default_server” por “443 ssl http2 default_server” em todas as linhas de $s_a/$domain.conf .

-l só é relevante com o comando l .

sed processa todas as linhas, a menos que você diga que não, por exemplo, parando cedo. A opção g para o comando s afeta apenas como várias ocorrências do termo de pesquisa são processadas por linha : sem g , somente a primeira ocorrência é substituída em qualquer linha, enquanto com g , todas as ocorrências são substituídas. Em ambos os casos, a substituição é aplicada a todas as linhas.

    
por 05.03.2018 / 11:47