it-swarm.com.de

So schneiden Sie eine Zeichenfolge nach einem bestimmten Zeichen in Unix

Also ich habe diese Zeichenfolge:

[email protected]:/home/some/directory/file

Ich möchte nur die Verzeichnisadresse extrahieren, das heißt, ich möchte nur das Bit nach dem Zeichen ":" und Folgendes erhalten:

/home/some/directory/file

vielen Dank.

Ich benötige einen generischen Befehl, damit der Befehl cut nicht funktioniert, da die Variable $ var keine feste Länge hat.

25
canecse

Sed verwenden:

$ [email protected]:/home/some/directory/file
$ echo $var | sed 's/.*://'
/home/some/directory/file
35
falsetru

Das könnte für Sie funktionieren:

echo ${var#*:}

Siehe Beispiel 10-10. Mustervergleich bei der Parametersubstitution

25
potong

Der Vollständigkeit halber mit cut

cut -d : -f 2 <<< $var

Und mit nur bash:

IFS=: read a b <<< $var ; echo $b
10
chthonicdaemon

Dies wird auch tun.

echo $var | cut -f2 -d":"
10
Manish V

Dies sollte den Trick machen:

$ echo "$var" | awk -F':' '{print $NF}'
/home/some/directory/file
7
Chris Seymour

Sie sagen nicht, welche Shell Sie verwenden. Wenn es sich um ein POSIX-kompatibles Gerät wie Bash handelt, kann die Parametererweiterung tun, was Sie wollen:

Parametererweiterung

...

${parameter#Word}

Kleinstes Präfixmuster entfernen.
Das Word wird erweitert, um ein Muster zu erzeugen. Die Parametererweiterung ergibt dann parameter, wobei der kleinste Teil des Präfixes mit dem gelöschten Muster übereinstimmt.

Mit anderen Worten, Sie können schreiben

$var="${var#*:}"

dadurch wird alles, was mit *: übereinstimmt, aus $var entfernt (d. h. alles bis einschließlich des ersten :). Wenn Sie bis zum letzten : Übereinstimmen möchten, können Sie ## Anstelle von # Verwenden.

Dies setzt voraus, dass der zu entfernende Teil nicht : Enthält (gilt für IPv4-Adressen, aber nicht für IPv6-Adressen).

4
Toby Speight
awk -F: '{print $2}' <<< $var
2
Jotne