In einer Datei mit Zeilen wie dieser:
# lorem ipsum blah variable
Ich möchte ein #
(Kommentar-) Zeichen in derselben Zeile entfernen , die eine bestimmte Zeichenfolge enthält. Ist sed
gut dafür
Ich kämpfe darum, dass diese Bedingung funktioniert. Ich habe eine "ungeschickte" Art, dies zu tun; Ich kann die übereinstimmende Zeilennummer mit awk
oder finden sed
und diese Nummer dann in einem separaten sed
Befehl verwenden, aber ich glaube, dass dies viel besser gemacht werden kann.
's/#//g'
entfernen werden alle die#
Zeichen in der Zeile. Wenn Sie das nicht möchten, entfernen Sie dasg
(was für "global" steht). (2) Um eine Datei an Ort und Stelle zu bearbeiten (wie in der Frage gefordert), verwenden Siesed -i
.sed -i '/ipsum/s/#[[:space:]]*//'
auskommentieren möchten, möchten Sie möglicherweise Leerzeichen und Tabulatoren entfernen, die unmittelbar auf die Zeile folgen#
. (4) Möglicherweise möchten Sie auch prüfen, ob#
das erste nicht leere Zeichen in der Zeile ist. Der aktuelle Befehl würde das#
aus der Zeile löschenprompt "Enter # of ipsums:"
.sed -i '/ipsum/s/^#[[:space:]]*//'
?! (^
bedeutet Beginn der Zeile,$
für das Ende der Zeile) - zumindest in Gnu Sed ...^
, aber das wäre falsch. Ich kommentiere eingerückten Code oft aus, indem ich#
den Code unmittelbar vor den Code setze, damit der Code#
eingerückt wird. Ich bezweifle, dass ich die einzige Person bin, die das tut.^
und#
so etwas wie folgt aus :/ipsum/{/^[[:space:]]*#/s/#[[:space:]]*//}
. Obwohl dies auch dann#
noch Probleme verursachen kann (z. B. in Sprachen, die Leerzeichen verwenden) , je nachdem, wo sich das befindet.dann:
gibt:
Es funktioniert wie folgt:
Das
s
sagt,sed
dass es ersetzen soll, was der reguläre Ausdruck findet.Das Muster setzt
# \(.*blue.*\)
sich wie folgt zusammen: Finden Sie einen Hash, gefolgt von einem Leerzeichen. Die Klammer (\(
) startet die Gruppierung..*blue.*
ist das Wortblue
mit irgendetwas davor und danach. Die nächste Klammer (\)
) schließt die Gruppierung.Der Ersatz ist
\1
ein Rückverweis auf den Inhalt der ersten Gruppierungsklammer.quelle
Sie können Vim im Ex-Modus verwenden:
s
Ersatzx
speichern und schließenquelle