Chcę przeanalizować zmienną (w moim przypadku jest to wersja zestawu deweloperskiego), aby uwolnić ją od kropki ( .
). Jeśli version='2.3.3'
pożądane wyjście to 233
.
Próbowałem jak poniżej, ale wymaga .
to zastąpienia inną postacią 2_3_3
. Byłoby dobrze, gdyby tr . ''
działało.
1 VERSION='2.3.3'
2 echo "2.3.3" | tr . _
bash
text-processing
prayagupd
źródło
źródło
echo "2.3.3" | tr -d .
.VERSION='2.30.3100'
? Bez względu na to, co.
zostało usunięte, wszystkie odpowiedzi tutaj.Odpowiedzi:
Nie ma potrzeby wykonywania programu zewnętrznego.
bash
„s manipulacji ciąg można go obsługiwać (dostępny również wksh
(skąd pochodzi) izsh
):(W instrukcjach dotyczących tych powłok można to znaleźć w sekcji rozszerzania parametrów.)
źródło
${string//substring/replacement}
, w której najwyraźniej brak końcowego ukośnika do przodu i ciągu zastępującego jest interpretowany jako delete . Zobacz tutaj .man bash
Jasne , mówi to wyraźnie w sekcji Rozszerzenia parametru powłoki : „${parameter/pattern/string}
(…) Jeśli łańcuch jest pusty, dopasowania wzorca są usuwane, a/
następujący wzorzec może zostać pominięty.”"1.0.0"
i chciałem tylko numer, więc postępuj zgodnie z sugestią @manatwork, że się zmieniłem:"${VERSIONNUM//'"'}"
jednak wstawiam nawet,' '
ponieważ inaczej nie rozpoznałby""
podobnego ciągu do startu."
są obecne w wartości? Obawiam się, że liczy się to jako nowe pytanie, ale spróbuj uciec od podwójnego cytatu:"${VERSIONNUM//\"}"
pastebin.com/3ECDtkwH-ash
!W porządku chronologicznym:
tr / sed
csh / tcsh
Pociski POSIX:
ksh / zsh / bash / yash (i busybox
ash
po zbudowaniu zASH_BASH_COMPAT
)zsh
źródło
Oprócz udanych odpowiedzi już istnieje.
tr
Z--delete
opcją można osiągnąć to samo .Co da wynik:
233
źródło
--delete
flaga nie jest rozpoznawana, ale można użyć-d
zamiast niejpowinieneś spróbować
sed
zamiast tegosed 's/\.//g'
źródło
To zwróci tylko cyfry, bez względu na to, jakie inne znaki są obecne
źródło
Perl
Pyton
Jeśli
$VERSION
zawierają tylko cyfry i kropki, możemy zrobić coś jeszcze krótszego:(uwaga: jest to luka w zabezpieczeniach polegająca na wstrzykiwaniu kodu, chociaż
$VERSION
może zawierać dowolny znak).AWK
Albo to:
źródło