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.conf
Zeile 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).14
18
sed
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
sed
Die 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 foo
bis zu der Zeile mit befehligen möchten bar
, verwenden Sie:
comment '/foo/,/bar/' bla.conf
BSD (OSX)-Systeme
Bei BSD sed -i
benö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 -i
Option 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
/ else
oder 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