Ich habe herausgefunden, wie man alles vor einem Schrägstrich druckt, aber ich muss alles nach einem Schrägstrich drucken. Ich habe eine Zeichenfolge wie blablabal/important
und muss nur drucken important
. Wie soll ich die folgende Zeile ändern, um alles nach einem Schrägstrich und nicht vorher zu drucken?
sed 's:/[^/]*$::'
text-processing
sed
Iris Pader
quelle
quelle
$
in der Regex.cut -d/ -f2- <infile
cut
besser ist alssed
dafür?Antworten:
Da Sie in Ihrem Kommentar erwähnt haben, dass die Datei nur einen Schrägstrich enthält, warum nicht einfach verwenden
awk
?Beispiel:
quelle
sed
Ersatz zu komplizieren, wenn es nur zwei Ergebnisse gibt.Löschen Sie einfach alles bis zum letzten Schrägstrich:
Es funktioniert auch mit mehreren Schrägstrichen:
quelle
Es sieht so aus, als würden die anderen Antworten davon ausgehen, dass eine Datei mehrere Datenzeilen enthält, die alle verarbeitet werden sollen. In diesem Fall
sed
oderawk
(oder möglicherweisecut
) wäre dies das beste Werkzeug, um alle Zeilen auf einmal zu verarbeiten.Wenn Sie jedoch nur eine Zeile in einer Shell-Variablen haben (vorausgesetzt, Sie verwenden
bash
), können Sie Shell-Erweiterungen verwenden, um das gewünschte Ergebnis zu erzielen, ohne Dienstprogramme in externen Prozessen erzeugen zu müssen:quelle
Das sollte funktionieren:
Der erste Teil
[^/]*
entspricht allem, ABER einem Schrägstrich, dann haben wir einen wörtlichen Schrägstrich/
und ein "passt zu allem".*
in der Klammer\(.*\)
. Die maskierten Klammern dienen dazu, das übereinstimmende Ergebnis zu "speichern", was bedeutet, dass es in diesem Fall alles nach dem ersten Schrägstrich enthält. Die\1
beziehen sich auf die erste übereinstimmende Gruppe, in diesem Fall haben wir nur eine Gruppe, da es nur ein\(...\)
Paar gibt.In
sed
ist das Zeichen, das Sie nach dems
eingeben, das Trennzeichen. Es ist eine übliche Praxis,/
als Trennzeichen zu verwenden, aber in diesem Fall ist es einfacher, etwas anderes zu verwenden, obwohl es auch möglich wäre, einen Schrägstrich zu verwenden.quelle
sed
.cut
wäre auch eine gute Antwort für diesen speziellen Fall.... druckt alles nach dem ersten Schrägstrich in eine Zeile, die einen enthält, oder druckt einen anderen unveränderten. Wenn Sie das ablegen
//
, werden nur die geänderten Zeilen gedruckt.Abhängig von Ihrer Version müssen Sie möglicherweise eine wörtliche
\n
Ewline anstellen
der\n
Escape- Zeile verwendensed
.Wenn Sie eine Anzahl von Vorkommen angeben ...
... können Sie bis zum num- ten Schrägstrich in einer Zeile löschen, ohne eine Zeile zu beeinflussen, die nicht mindestens num- Schrägstriche enthält.
quelle