Ich habe eine Zeichenfolge als $sea = xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tgz
und ich möchte nur DMJK.UK.1.0-32133-Z-1 extrahieren und die Suchzeichenfolge wird DMJK sein
Ich habe es versucht
echo $sea
y=${sea/\/*\//};
echo ${y/.*/};
aber es funktioniert nicht, bitte helfen Sie
Antwort1
Wie Sie entscheiden, was entfernt und was behalten werden soll, ist überhaupt nicht klar. Dies ist eine von vielen Möglichkeiten, um das gewünschte Ergebnis zu erzielen:
$ sea=xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tgz
$ sea2=${sea/*[[:lower:]]-/}; echo ${sea2%.*}
DMJK.UK.1.0-32133-Z-1
Alternativ umfasst dies die Teile, die mit DMJK
dem letzten beginnen und weglassen .tgz
:
$ sea2=${sea/*DMJK/DMJK}; echo ${sea2%.tgz}
DMJK.UK.1.0-32133-Z-1
Derselbe Ansatz funktioniert auch, wenn Folgendes .tgz
nicht vorhanden ist:
$ sea=xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1
$ sea2=${sea/*DMJK/DMJK}; echo ${sea2%.tgz}
DMJK.UK.1.0-32133-Z-1
Antwort2
Wie bestimmen Sie, welche Zeichen extrahiert werden sollen? Wenn die Zeichen immer an bestimmten Stellen in der Zeichenfolge erscheinen, z. B. wenn es sich um eine Zeichenfolge mit fester Länge handelt oder die benötigten Zeichen die letzten 21 Zeichen vor einem Punkt und einer 3-stelligen Erweiterung sind, können Sie in einem Bash-Skript eine der folgenden Optionen verwenden:
sea="xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tgz"
echo $sea
# If characters are always in positions 33 to 50
y=${sea:33:21}
echo $y
# If y always start 5 positions from the end and goes back 21 characters
# For negative numbers you need to put a space between the colon and the
# number
#
# Get the last 25 characters in the string
y=${sea: -25}
# Now discard the last 4, which are the dot and 3 character extension
y=${y:0:21}
echo $y
Antwort3
Hängt davon ab, wie Ihre Variable in anderen Instanzen aussehen könnte.
Es könnte so einfach sein wie:
echo $sea | cut -d '-' -f 7- | cut -d . -f -4
oder
echo $sea | sed 's#.*\(DMJK.*\).tgz#\1#g'