Wie kann ich den gesamten Text nach einem Zeichen, in diesem Fall einem Doppelpunkt (":"), in Bash entfernen? Kann ich den Doppelpunkt auch entfernen? Ich habe keine Ahnung wie.
147
Ein Beispiel könnte nützlich gewesen sein, aber wenn ich Sie richtig verstanden hätte, würde dies funktionieren:
echo "Hello: world" | cut -f1 -d":"
Dies wird "Hallo: Welt" in "Hallo" umwandeln.
cut
funktioniert, aber ich Dennis 'Antwort ist besser und flexibler. Weiß jemand, ob es einen neuen Prozess hervorbringt wiecut
?basename
und ausgeführtcut
werden. Siehe Dennis 'Antwort untencut
kann von stdin lesen, daher ist es besser, besonders wenn Sie eine sehr lange Zeichenfolge haben, die Sie verarbeiten müssen, wie den Inhalt einer Datei.hello: world
. Das ist eine halbe Antwort.In Bash (und ksh, zsh, dash usw.) können Sie die Parametererweiterung verwenden, mit
%
der Zeichen vom Ende der Zeichenfolge oder#
Zeichen vom Anfang der Zeichenfolge entfernt werden. Wenn Sie ein einzelnes dieser Zeichen verwenden, wird die kleinste übereinstimmende Zeichenfolge entfernt. Wenn Sie das Zeichen verdoppeln, wird das längste entfernt.quelle
hello:world
werden wirdhello:wo
durch den Einsatz${a%:*}
?"${a##*:}"
, nur zu bekommentomorrow
=)a='hello:world:of:tomorrow'; pattern=''^([^:]*:).*$'
; [[$ a = ~ $ pattern]]; echo "$ {BASH_REMATCH [1]}" `. Das passt nur, wenn es einen Doppelpunkt gibt. Wenn dies optional sein soll, muss ein anderes Muster verwendet werden. Eine Erklärung von Bash-Regexen (und Regexen im Allgemeinen) würde den Rahmen dieser Kommentare sprengen. Sie können andere Fragen finden, die dies diskutieren, oder Ihre eigenen posten.quelle
quelle
egrep
ist grep mit-E
. Es macht hier keinen Unterschied zum regulärengrep
.-o
weist grep an, nur den Teil der Zeile auszudrucken, der dem Ausdruck entspricht.^
verankert das Match am Anfang einer Linie.[^:]*
Entspricht null oder mehr Zeichen, die nicht das:
Zeichen sind.:
passt zum Charakter:
.Angenommen, Sie haben einen Pfad mit einer Datei in diesem Format:
Jetzt möchten Sie nur den Pfad, der vier "/" enthält. Art
und Ihre Ausgabe wird sein
Der Vorteil der Verwendung von cut besteht darin, dass Sie sowohl das oberste Verzeichnis als auch die Datei (in diesem Beispiel) ausschneiden können, wenn Sie also eingeben
Ihre Ausgabe wäre
Obwohl Sie dasselbe von der anderen Seite der Zeichenfolge aus tun können, wäre dies in diesem Fall nicht so sinnvoll wie das Tippen
führt zu
In einigen anderen Fällen kann auch der letzte Fall hilfreich sein. Beachten Sie, dass am Anfang der letzten Ausgabe kein "/" steht.
quelle
Schneiden Sie alles nach der letzten Instanz von ":" ab.
und wenn Sie das letzte ":" fallen lassen wollten
@ kp123: Sie möchten ersetzen
:
durch/
(wo der sed Doppelpunkt sein sollte\/
)quelle