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


37

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

zum Beispiel:

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

Dies würde hinzufügen oder entfernen #anmelden bla.confonline 14zu 18. Normalerweise benutze ich sed, aber ich muss den Inhalt dieser Zeilen kennen und dann eine Find-Replace-Operation ausführen, und das würde zu einem falschen Ergebnis führen, wenn es mehr als eine Nadel gibt (und wir wollen nur die N-te ersetzen eins).


1
Es gibt eine A diese Q betitelt: uncommenting mehrere Code - Zeilen, die von Zeilennummern angegeben, mit vi oder vim , die zeigt , viele Methoden , dies zu tun mit sed, perletc. Insbesondere die A von terdon!
slm

Antworten:


46

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

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

Um den gewünschten Befehl zu erstellen, 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 wie Ihr Skript verwendet, mit der Ausnahme, dass die erste und die letzte Zeile durch ein Komma und nicht durch einen Bindestrich getrennt werden sollen. Beispielsweise:

comment 2,4 bla.conf

Ein Kommentarbefehl kann analog erstellt werden.

Erweiterte Funktion

sedDie Zeilenauswahl ist ziemlich mächtig. 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 einen mit foobis zur anderen mit befehlen möchten bar, verwenden Sie:

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

BSD (OSX) Systeme

Bei BSD sed -ibenötigt die Option ein Argument, auch wenn es sich nur um eine leere Zeichenfolge handelt. Ersetzen Sie daher zum Beispiel den obigen Befehl top durch:

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

Und ersetzen Sie den Befehl im Skript durch:

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

1
Sind die Doppel 'nach der -iOption beabsichtigt? Brauchte sie nicht
Raffinesse


2

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.