La forma más sencilla de comentar/descomentar ciertas líneas usando la línea de comando

La forma más sencilla de comentar/descomentar ciertas líneas usando la línea de comando

¿Hay alguna manera de comentar/descomentar un script Shell/config/ruby usando la línea de comando?

Por ejemplo:

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

esto agregaría o eliminaría #el inicio de sesión bla.confen línea 14en 18. Normalmente uso sed, pero debo conocer el contenido de esas líneas y luego hacer una operación de búsqueda y reemplazo, y eso daría un resultado incorrecto cuando hay más de una aguja (y solo queremos reemplazar la N-ésima uno).

Respuesta1

Para comentar las líneas 2 a 4 de bla.conf:

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

Para crear el comando que desea, simplemente coloque lo anterior en un script de shell llamado comentario:

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

Este script se usa igual que el suyo con la excepción de que la primera y la última línea deben estar separadas por una coma en lugar de un guión. Por ejemplo:

comment 2,4 bla.conf

De manera análoga se puede crear un comando para descomentar.

Característica avanzada

sedLa selección de líneas es bastante poderosa. Además de especificar la primera y la última línea por número, también es posible especificarlas mediante una expresión regular. Entonces, si desea ordenar todas las líneas desde la que contiene foohasta la que contiene bar, use:

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

Sistemas BSD (OSX)

Con BSD sed, la -iopción necesita un argumento incluso si es solo una cadena vacía. Así, por ejemplo, reemplace el comando superior anterior con:

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

Y reemplace el comando en el script con:

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

Respuesta2

Con GNU sed (para reemplazar los archivos existentes con la -iopción):

sed -i '14,18 s/^/#/' bla.conf
sed -i '14,18 s/^##*//' bla.conf

Respuesta3

Puedes crear un bash_file con funciones para reutilizarlo en tus proyectos

#!/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

Respuesta4

Usandorakú(anteriormente conocido como Perl_6)


Líneas de comentarios:

~$ raku -ne 'if (6 <= ++$ <= 8) { put S/^/#/ } else { $_.put };' alpha10.txt

#OR

~$ raku -ne '(6 <= ++$ <= 8) ?? put S/^/#/ !! $_.put;' alpha10.txt

#OR

~$ raku -ne 'put (6 <= ++$ <= 8) ?? S/^/#/ !! $_;' alpha10.txt

#OR

~$ raku -pe 'if (6 <= ++$ <= 8) { s/^/#/ };' alpha10.txt

Entrada de muestra:

~$ raku -e 'print "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\n";' > alpha10.txt

Salida de muestra:

a
b
c
d
e
#f
#g
#h
i
j

Estas respuestas (arriba Y abajo) aprovechan la sintaxis condicional de Raku, ya sea if/ elseo ternaria: "Prueba ??Verdadero !!Falso". Consulte las URL a continuación para obtener más detalles. Nótense las <=desigualdades encadenadas. Además: los pares del condicional son superfluos. Y si tiene dificultades para citar, el #octothorpe se puede ingresar como una clase de carácter personalizada de un solo carácter a través de <[#]>, (con o sin cuantificador).


Líneas de descomentario:

~$ raku -ne 'if (6 <= ++$ <= 8) { put S/^ \s* "#" // } else { $_.put };' alpha10commented.txt

#OR

~$ raku -ne '(6 <= ++$ <= 8) ?? put S/^ \s* "#"// !! $_.put;' alpha10commented.txt

#OR

~$ raku -ne 'put (6 <= ++$ <= 8) ?? S/^ \s* "#" // !! $_;' alpha10commented.txt

#OR

~$ raku -pe 'if (6 <= ++$ <= 8) { s/^ \s* "#" // };' alpha10commented.txt

Entrada de muestra:

~$ raku -e 'print "a\nb\nc\nd\ne\n#f\n#g\n#h\ni\nj\n";' > alpha10commented.txt

Salida de muestra:

a
b
c
d
e
f
g
h
i
j

https://docs.raku.org/syntax/if
https://docs.raku.org/language/operators#index-entry-operator_ternary
https://raku.org

información relacionada