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

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

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

Zum Beispiel:

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

dies würde #das Zeichen in der bla.confZeile hinzufügen oder entfernen . Normalerweise verwende ich , aber ich muss den Inhalt dieser Zeilen kennen und dann eine Suchen-Ersetzen-Operation ausführen, und das würde ein falsches Ergebnis liefern, wenn mehr als eine Nadel vorhanden ist (und wir nur die N-te ersetzen möchten).1418sed

Antwort1

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

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

Um den gewünschten Befehl einzugeben, fügen Sie das Obige einfach in ein Shell-Skript mit dem Namen „Kommentar“ ein:

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

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

comment 2,4 bla.conf

Ein Uncomment-Befehl kann analog erstellt werden.

Erweiterte Funktion

sedDie Zeilenauswahl von ist ziemlich leistungsfähig. Neben der Angabe der ersten und letzten Zeile per Nummer ist es auch möglich, diese per regulärem Ausdruck anzugeben. Wenn Sie also alle Zeilen von der Zeile mit foobis zu der Zeile mit befehligen 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 nur eine leere Zeichenfolge ist. Ersetzen Sie daher beispielsweise den obigen Top-Befehl durch:

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

Und ersetzen Sie den Befehl im Skript durch:

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

Antwort2

Mit GNU sed (um die vorhandenen Dateien durch die -iOption zu ersetzen):

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

Antwort3

Sie können eine Bash-Datei 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

Antwort4

Verwenden vonRaku(früher bekannt als Perl_6)


Auskommentierungszeilen:

~$ raku -ne 'if (6 <= ++$ <= 8) { put S/^/#/ } else { $_.put };' alpha10.txt

#OR

~$ raku -ne '(6 <= ++$ <= 8) ?? put S/^/#/ !! $_.put;' alpha10.txt

#OR

~$ raku -ne 'put (6 <= ++$ <= 8) ?? S/^/#/ !! $_;' alpha10.txt

#OR

~$ raku -pe 'if (6 <= ++$ <= 8) { s/^/#/ };' alpha10.txt

Beispieleingabe:

~$ raku -e 'print "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\n";' > alpha10.txt

Beispielausgabe:

a
b
c
d
e
#f
#g
#h
i
j

Diese Antworten (oben UND unten) nutzen Rakus bedingte Syntax, entweder if/ elseoder ternär: „Test ??True !!False“. Weitere Einzelheiten finden Sie unter den URLs unten. Beachten Sie die verketteten <=Ungleichungen. Außerdem: Klammern um den Bedingungssatz sind überflüssig. Und sollten Sie Schwierigkeiten beim Zitieren haben, #kann das Octothorpe als einstellige, maßgeschneiderte Zeichenklasse über <[#]>, eingegeben werden (mit oder ohne Quantifizierer).


Entfernen Sie die Kommentarzeichen aus den folgenden Zeilen:

~$ raku -ne 'if (6 <= ++$ <= 8) { put S/^ \s* "#" // } else { $_.put };' alpha10commented.txt

#OR

~$ raku -ne '(6 <= ++$ <= 8) ?? put S/^ \s* "#"// !! $_.put;' alpha10commented.txt

#OR

~$ raku -ne 'put (6 <= ++$ <= 8) ?? S/^ \s* "#" // !! $_;' alpha10commented.txt

#OR

~$ raku -pe 'if (6 <= ++$ <= 8) { s/^ \s* "#" // };' alpha10commented.txt

Beispieleingabe:

~$ raku -e 'print "a\nb\nc\nd\ne\n#f\n#g\n#h\ni\nj\n";' > alpha10commented.txt

Beispielausgabe:

a
b
c
d
e
f
g
h
i
j

https://docs.raku.org/syntax/if
https://docs.raku.org/language/operators#index-entry-operator_ternary
https://raku.org

verwandte Informationen