Usando sed uma vez para pesquisar / substituir diferentes strings

2

Estou usando o sed para encontrar diretivas de configuração em um arquivo php. Essencialmente, preciso definir as strings database_name_here , username_here e password_here com seus valores apropriados no arquivo config-sample.php (e renomeie o arquivo para config.php). Minha solução atual usa sed três vezes, redirecionando a saída para arquivos temporários.

sed -e 's/database_name_here/foo/g' config-sample.php > /tmp/config.1
sed -e 's/username_here/bar/g' /tmp/config.1 > /tmp/config.2
sed -e 's/password_here/bat/g' /tmp/config.2 > config.php

Eu queria saber como conseguir os mesmos resultados sem ter que criar dois arquivos temporários?

    
por v0idless 06.11.2011 / 21:22

1 resposta

5

Você pode passar vários argumentos -e para sed. Em cada linha, cada transformação é aplicada por vez.

<config-sample.php sed -e 's/database_name_here/foo/g' -e 's/username_here/bar/g' -e 's/password_here/bat/g' >config.php

Algumas implementações também permitem separar vários comandos com ; , mas isso nem sempre é o caso e não funciona com comandos que esperam uma nova linha final. A maioria das implementações (mas ainda não todas) permite separar vários comandos com uma nova linha.

Note que se você tivesse precisado de vários comandos, você não precisaria usar arquivos temporários, você poderia ter usado pipes.

<config-sample.php sed -e '…' | grep -v '^#' >config-without-comments.php
    
por 06.11.2011 / 21:30

Tags