A maneira mais simples de comentar / descomentar certas linhas usando a linha de comando

30

Existe uma maneira de comentar / descomentar um script shell / config / ruby usando a linha de comando?

por exemplo:

$ comment 14-18 bla.conf
$ uncomment 14-18 bla.conf

isso adiciona ou remove o sinal # em bla.conf na linha 14 a 18 . Normalmente eu uso sed , mas eu devo conhecer o conteúdo dessas linhas e então fazer uma operação de localizar e substituir, e isso daria um resultado errado quando houver mais de uma agulha (e nós queremos apenas substituir a N-um).

    
por Kokizzu 09.05.2014 / 05:01

4 respostas

40

Para comentar as linhas 2 a 4 do arquivo bla.conf:

sed -i '2,4 s/^/#/' bla.conf

Para fazer o comando que você queria, basta colocar o acima em um script de shell chamado comment:

#!/bin/sh
sed -i "$1"' s/^/#/' "$2"

Esse script é usado da mesma maneira que o seu, com a exceção de que a primeira e a última linhas devem ser separadas por uma vírgula, e não por um traço. Por exemplo:

comment 2,4 bla.conf

Um comando de comentário pode ser criado analogamente.

Recurso avançado

A seleção da linha de

sed é bastante poderosa. Além de especificar as primeiras e últimas linhas por número, também é possível especificá-las por um regex. Então, se você quiser comandar todas as linhas daquele contendo foo para o contendo bar , use:

comment '/foo/,/bar/' bla.conf

Sistemas BSD (OSX)

Com o BSD sed, a opção -i precisa de um argumento, mesmo que seja apenas uma string vazia. Assim, por exemplo, substitua o comando superior acima por:

sed -i '' '2,4 s/^/#/' bla.conf

E substitua o comando no script por:

sed -i '' "$1"' s/^/#/' "$2"
    
por 09.05.2014 / 05:04
5

Com o GNU sed (para substituir os arquivos no lugar pela opção -i ):

sed -i '14,18 s/^/#/' bla.conf
sed -i '14,18 s/^##*//' bla.conf
    
por 09.05.2014 / 05:04
1

Você pode usar o Vim no modo Ex:

ex -sc 'g/^\s*[^#]/s/^/#/' -cx bla.conf
ex -sc 'g/^\s*#/s/#//' -cx bla.conf
  1. g regex global

  2. s substituto

  3. x salvar e fechar

por 17.04.2016 / 07:40
1

Você pode criar um bash_file com funções para reutilizá-lo em seus projetos

#!/bin/bash

# your target file
CONFIG=./config.txt

# comment target
comment() {
  sed -i '' "s/^$1/#$1/" $CONFIG
}

# comment target
uncomment() {
  echo $1
  sed -i '' "s/^#$1/$1/" $CONFIG
}


# Use it so:
uncomment enable_uart
comment arm_freq
    
por 28.10.2018 / 19:54