Manière la plus simple de commenter / décommenter certaines lignes à l'aide de la ligne de commande


37

Existe-t-il un moyen de commenter / de commenter un script shell / config / ruby ​​en ligne de commande?

par exemple:

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

cela ajouterait ou supprimerait la #connexion bla.confen ligne 14à 18. Normalement, je l’utilise sed, mais je dois connaître le contenu de ces lignes, puis effectuer une opération de recherche / remplacement, ce qui donnerait un résultat erroné s’il ya plus d’une aiguille (et nous ne voulons que remplacer le N-ème une).


1
Il y a un A à ce Q intitulé: décommentant plusieurs lignes de code, spécifié par les numéros de ligne, en utilisant vi ou vim qui montre de nombreuses méthodes pour ce faire à l' aide sed, perletc. Plus précisément A par terdon!
slm

Réponses:


46

Pour commenter les lignes 2 à 4 de bla.conf:

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

Pour faire la commande que vous vouliez, il suffit de mettre ce qui précède dans un script shell appelé comment:

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

Ce script est utilisé de la même façon que le vôtre, sauf que les première et dernière lignes doivent être séparées par une virgule plutôt que par un tiret. Par exemple:

comment 2,4 bla.conf

Une commande de suppression de commentaire peut être créée de manière analogue.

Fonctionnalité avancée

sedLa sélection de ligne de 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 qui contient fooà celle qui contient bar, utilisez:

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

Systèmes BSD (OSX)

Avec BSD sed, l' -ioption nécessite 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"

1
Le double 'après l' -ioption est-il intentionnel? Je n'ai pas besoin d'eux
raphinesse


2

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 regex global

  2. s remplacer

  3. x sauver et fermer


2

Vous pouvez créer un fichier bash 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.