Existe-t-il un moyen de commenter/décommenter un script Shell/config/Ruby en utilisant la ligne de commande?
par exemple:
$ comment 14-18 bla.conf
$ uncomment 14-18 bla.conf
cela ajouterait ou supprimerait #
se connecter bla.conf
en ligne 14
à 18
. Normalement, j'utilise sed
, mais je dois connaître le contenu de ces lignes, puis effectuer une opération de recherche et remplacement, ce qui donnerait un mauvais résultat lorsqu'il y a plus d'une aiguille (et nous voulons seulement pour remplacer le N-ème).
Pour commenter les lignes 2 à 4 de bla.conf:
sed -i '2,4 s/^/#/' bla.conf
Pour faire la commande que vous vouliez, mettez simplement ce qui précède dans un script Shell appelé commentaire:
#!/bin/sh
sed -i "$1"' s/^/#/' "$2"
Ce script est utilisé de la même manière que le vôtre, sauf que la première et la dernière ligne doivent être séparées par une virgule plutôt que par un tiret. Par exemple:
comment 2,4 bla.conf
Une commande de décommentation peut être créée de manière analogue.
La sélection de ligne de sed
est assez puissante. En plus de spécifier la première et la dernière ligne par numéro, il est également possible de les spécifier par une expression régulière. Donc, si vous voulez commander toutes les lignes de celle contenant foo
à celle contenant bar
, utilisez:
comment '/foo/,/bar/' bla.conf
Avec BSD sed, l'option -i
A besoin d'un argument même s'il ne s'agit que d'une chaîne vide. Ainsi, par exemple, remplacez la commande supérieure ci-dessus par:
sed -i '' '2,4 s/^/#/' bla.conf
Et, remplacez la commande dans le script par:
sed -i '' "$1"' s/^/#/' "$2"
Avec GNU sed (pour remplacer les fichiers en place par le -i
option):
sed -i '14,18 s/^/#/' bla.conf
sed -i '14,18 s/^##*//' bla.conf
Vous pouvez utiliser Vim en mode Ex:
ex -sc 'g/^\s*[^#]/s/^/#/' -cx bla.conf
ex -sc 'g/^\s*#/s/#//' -cx bla.conf
g
expression rationnelle globale
s
substitut
x
enregistrer et fermer
Vous pouvez créer un bash_file avec des fonctions pour le réutiliser dans vos projets
#!/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