Faça várias edições com uma única chamada para sed

7

Estou tentando usar o sed para editar um arquivo de configuração. Existem algumas linhas que gostaria de alterar. Eu sei que no Linux sed -i permite edições in-loco, mas requer que você salve em um arquivo de backup. No entanto, gostaria de evitar ter vários arquivos de backup e fazer todas as alterações no meu local de uma só vez.

Existe uma maneira de fazer isso com sed -i ou existe uma alternativa melhor?

    
por bunana 09.03.2016 / 14:29

3 respostas

11

Você pode dizer a sed para realizar várias operações apenas repetindo -e (ou -f se o seu script estiver em um arquivo).

sed -i -e 's/a/b/g' -e 's/b/d/g' file faz as duas alterações no arquivo único chamado file in-place. Sem um arquivo de backup.

sed -ibak -e 's/a/b/g' -e 's/b/d/g' file faz as duas alterações no arquivo único chamado file in-place. Com um único arquivo de backup chamado filebak .

    
por 09.03.2016 / 14:36
2

Além de usar várias opções -e , você também pode separar os comandos sed em um único script sed usando novas linhas ou ponto e vírgula.

Este é o caso se esse script é um one-liner na linha de comando, ou um arquivo de script.

por exemplo,

sed -e 's/a/b/g ; s/b/d/g' file

Os caracteres de espaço em torno do ; são opcionais. Eu os usei aqui para me certificar de que o ponto-e-vírgula se destaca (em geral, exceto por novas linhas separando comandos, o espaço em branco entre os comandos é ignorado ... mas não se esqueça que o espaço em branco dentro dos comandos pode ser e geralmente é significativo).

ou:

sed -e 's/a/b/g
        s/b/d/g' file
    
por 11.03.2016 / 02:38
2

Outra alternativa é ex , o antecessor de vi . Na verdade, é a a ferramenta POSIX de escolha para edição de arquivos com script no local; é extraordinariamente mais flexível que sed -i e, possivelmente, até mais portátil que Perl. (Se você ficar fora do mundo do Windows, é indiscutivelmente mais portável que o Perl.)

Há uma escassez relativa neste stackexchange de exemplos de comandos usando ex , pelo menos em comparação com a infinidade de exemplos de comandos usando sed , awk e Perl. No entanto, eu próprio mergulhei bastante nas especificações POSIX para ex e já estive batendo o tambor por isso desde então. Eu escrevi muitas respostas usando ex aqui e no stackexchange vi / Vim:

Leitura adicional:

por 11.03.2016 / 05:36

Tags