#! /bin/sh
lineversion ="/tmp/g-9.n.gggg1000.fr-worker1.V.2.tar.bz2"
Moje pytanie: jak mogę wyciągnąć
g-9.n.gggg1000.fr-worker1.V.2
z
$lineversion
w innej zmiennej
#! /bin/sh
lineversion ="/tmp/g-9.n.gggg1000.fr-worker1.V.2.tar.bz2"
Moje pytanie: jak mogę wyciągnąć
g-9.n.gggg1000.fr-worker1.V.2
z
$lineversion
w innej zmiennej
Odpowiedzi:
newvar=`echo $lineversion | sed 's/\.tar\.bz2//' | sed 's/\/tmp\///'`
sed
to narzędzie „szukaj i zamień” unixa. W powyższym przykładzie jesteśmy s szukanie najpierw „.tar.bz2” (i uciekanie przed kropkami z poprzedzającym ukośnikiem odwrotnym) i zastępowanie go niczym, a następnie pobieranie tego wyjścia i wyszukiwanie „/ tmp /” i zastępowanie go niczym innym.
Ogólnie: sed 's/search_for/replace_with/'
Możesz użyć składni podciągów, aby wyodrębnić znaki ze stałej pozycji:
echo ${lineversion:position:length}
echo ${lineversion:5:30}
Inną metodą byłoby wycięcie trochę niepotrzebnych znaków:
echo ${lineversion} | cut -d '/' -f3 | sed 's/\.tar\.bz2$//g'
echo $lineversion | sed -e 's/\.tar\.bz2//' -e sed 's/\/tmp\///'
. Poza tym, brakowało tylnych cytatów (`) wokół polecenia, aby ustawić je w zmiennej.