Modo più semplice per commentare / rimuovere il commento da alcune righe usando la riga di comando


37

C'è un modo per commentare / decommentare uno script shell / config / ruby ​​usando la riga di comando?

per esempio:

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

questo aggiungerebbe o rimuoverebbe l' #accesso bla.confon line 14a 18. Normalmente lo uso sed, ma devo conoscere il contenuto di quelle linee e quindi fare un'operazione di ricerca e sostituzione, e ciò darebbe un risultato sbagliato quando ci sono più di un ago (e vogliamo solo sostituire l'N-esima uno).


1
C'è una A a questo Q dal titolo: decommentando più righe di codice, specificato da numeri di riga, utilizzando vi o vim , che mostra molti metodi per fare questo usando sed, perlecc In particolare la A da terdon!
slm

Risposte:


46

Per commentare le righe da 2 a 4 di bla.conf:

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

Per eseguire il comando desiderato, basta inserire quanto sopra in uno script di shell chiamato commento:

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

Questo script viene utilizzato come il tuo, ad eccezione del fatto che la prima e l'ultima riga devono essere separate da una virgola anziché da un trattino. Per esempio:

comment 2,4 bla.conf

Un comando di commento può essere creato in modo analogo.

Funzionalità avanzata

sedLa selezione della linea è piuttosto potente. Oltre a specificare la prima e l'ultima riga per numero, è anche possibile specificarle con una regex. Quindi, se vuoi comandare tutte le righe da quella che contiene fooa quella che contiene bar, usa:

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

Sistemi BSD (OSX)

Con BSD sed, l' -iopzione ha bisogno di un argomento anche se è solo una stringa vuota. Pertanto, ad esempio, sostituire il comando superiore sopra con:

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

E, sostituisci il comando nello script con:

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

1
Il doppio 'dopo l' -iopzione è intenzionale? Non ne avevo bisogno.
raphinesse,


2

Puoi usare Vim in modalità Ex:

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

  2. s sostituire

  3. x salva e chiudi


2

Puoi creare un file bash_file con funzioni per riutilizzarlo nei tuoi progetti

#!/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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.