Mam ciąg jak rev00000010
i chcę tylko ostatnią liczbę, w tym przypadku 10.
Próbowałem tego:
TEST='rev00000010'
echo "$TEST" | sed '/^[[:alpha:]][0]*/d'
echo "$TEST" | sed '/^rev[0]*/d'
oba zwracają nic, chociaż wyrażenie regularne wydaje się być poprawne (wypróbowano z wyrażeniem regularnym )
sed
regular-expression
Michael Niemand
źródło
źródło
Odpowiedzi:
Polecenia, które przekazałeś,
sed
oznaczają: jeśli wiersz pasuje do wyrażenia regularnego, usuń go . Nie tego chcesz.Oznacza to: w każdej linii usuń rev, a następnie dowolną liczbę zer.
Nie potrzebujesz też
sed
tak prostej rzeczy. Wystarczy użyć bash i jego rozszerzenia parametrów :źródło
POSIXly:
Usuwałby wszystko po lewej stronie najbardziej niezerowej cyfry po lewej stronie.
Bournely / uniwersalnie:
źródło
test='rev 003A0.1056'
produkujenumber="3A0.1056"
. Drugi zepsuje się na dowolnym polu, wytworzy tę samą wartość:003A0.1056
z wyraż.Jeśli masz już zmienną TEST, po prostu wydrukuj ją z usuniętą całą literą
lub
Nie używaj
%d
lubecho
-polecaj, ponieważ liczby z wiodącym0
są rozumiane jakooctal
źródło
Kilka dodatkowych opcji (choć zalecam również użycie rozszerzenia parametrów, jak sugeruje @choroba):
Użyj
sed
lub,perl
aby zastąpić wszystko oprócz dwóch ostatnich znaków dwoma ostatnimi znakami. To skutecznie usuwa wszystko oprócz dwóch ostatnich.Ustaw
awk
ogranicznik pola na 2 lub więcej zer i wydrukuj ostatnie pole:Wyodrębnij tylko dwa ostatnie znaki:
Wydrukuj tylko 10-te ostatnie bajty:
Zauważ, że wszystkie powyższe zastosowania,
<<<$var
które są konstrukcją bash. Aby użyć go w innych powłokach, zmień naecho "$TEST" | command
.źródło
awk -F"[a-z]" '{print +$NF}'
Aby uzyskać „ostatnią liczbę”, wybierz dowolną sekwencję cyfr na końcu ciągu i przekonwertuj ją na liczbę dziesiętną:
Z Bash:
Z grep:
źródło