web-dev-qa-db-fra.com

Manière la plus simple de commenter / commenter certaines lignes en utilisant la ligne de commande

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).

37
Kokizzu

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.

Fonction avancée

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

Systèmes BSD (OSX)

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"
49
John1024

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
  1. g expression rationnelle globale

  2. s substitut

  3. x enregistrer et fermer

2
Steven Penny

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
2
Jan