it-swarm.com.de

Einfachste Möglichkeit, bestimmte Zeilen über die Befehlszeile zu kommentieren / zu kommentieren

Gibt es eine Möglichkeit, ein Shell/config/Ruby-Skript über die Befehlszeile zu kommentieren/zu kommentieren?

zum Beispiel:

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

dies würde das # - Zeichen auf bla.conf in Zeile 14 zu 18 hinzufügen oder entfernen. Normalerweise verwende ich sed, aber ich muss den Inhalt dieser Zeilen kennen und dann eine Such-/Ersetzungsoperation ausführen, und das würde zu einem falschen Ergebnis führen, wenn mehr als eine Nadel vorhanden ist (und wir nur wollen den N-ten ersetzen).

37
Kokizzu

So kommentieren Sie die Zeilen 2 bis 4 von bla.conf:

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

Um den gewünschten Befehl auszuführen, fügen Sie den obigen Befehl einfach in ein Shell-Skript mit dem Namen comment ein:

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

Dieses Skript wird genauso verwendet wie Ihr Skript, mit der Ausnahme, dass die erste und die letzte Zeile durch ein Komma und nicht durch einen Bindestrich getrennt werden sollen. Zum Beispiel:

comment 2,4 bla.conf

Analog kann ein Kommentarkommentar erstellt werden.

Erweiterte Funktion

Die Zeilenauswahl von sed ist sehr leistungsfähig. Neben der Angabe der ersten und letzten Zeile nach Nummer können diese auch durch einen regulären Ausdruck angegeben werden. Wenn Sie also alle Zeilen von der Zeile mit foo bis zur Zeile mit bar befehlen möchten, verwenden Sie:

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

BSD (OSX) Systeme

Bei BSD sed benötigt die Option -i Ein Argument, auch wenn es sich nur um eine leere Zeichenfolge handelt. Ersetzen Sie beispielsweise den obigen Befehl top durch:

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

Ersetzen Sie den Befehl im Skript durch:

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

Mit GNU sed (um die vorhandenen Dateien durch die Option -i Zu ersetzen):

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

Sie können Vim im Ex-Modus verwenden:

ex -sc 'g/^\s*[^#]/s/^/#/' -cx bla.conf
ex -sc 'g/^\s*#/s/#//' -cx bla.conf
  1. g globaler regulärer Ausdruck

  2. s Ersatz

  3. x speichern und schließen

2
Steven Penny

Sie können eine bash_file mit Funktionen erstellen, um sie in Ihren Projekten wiederzuverwenden

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