Odpowiedzi:
Zakładając, że masz na myśli to, że chcesz usunąć wszystko do ostatniego dwukropka i pozostawić john.doe
nienaruszone:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
Pierwszy wiersz po prostu potokuje łańcuch testowy sed
na przykład do celów.
Drugi to sed
podstawienie podstawowe . Część między pierwszą a drugą /
jest wyrażeniem regularnym do wyszukania, a część między drugim a trzecim jest tym, co ma ją zastąpić (nic w tym przypadku, ponieważ usuwamy).
Dla wyrażenia regularnego .
dopasowuje dowolny znak, *
powtarza to dowolną liczbę razy (w tym zero) i :
dopasowuje dwukropek. Tak skutecznie, po nim następuje dwukropek. Ponieważ .*
może zawierać dwukropek, dopasowanie jest „zachłanne” i obejmuje wszystko do ostatniego jelita grubego.
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'
Ja zastąpienie wszystkich wystąpień : o karcie , a następnie za pomocą awk
wyodrębnić john.doe ciąg.
Jeśli nie masz pliku, możesz spróbować.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' |
awk -F'\t' '{print $4}'
Zgodnie z komentarzami Graeme możemy użyć awk
do wydrukowania ostatniej kolumny samodzielnie, używając NF
zmiennej awk
jak poniżej.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'
Włączenie komentarzy Graeme, aby pozbyć się niepotrzebnych sed
Polecenie można zmodyfikować jak poniżej.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
awk
. Zasadniczo próbuję przetestować polecenia, które pierwotnie otrzymałem w odpowiedzi i próbuję je zmodyfikować zgodnie z wymaganiami użytkownika. :)
-F
Opcja awk
określa separator pól. Jeśli zdecydujesz awk
się użyć dwukropka, nie ma potrzeby zastępowania dwukropka tabulatorami. Ponadto, jeśli chcesz uzyskać ostatnie pole, którego możesz użyć $NF
zamiast $4
, działałoby to, jeśli nie zawsze są 3 dwukropki.
Inna metoda wykorzystująca awk
:
awk -F: '{ print $NF }'
Proszę spróbować
edycja: usunięto kotwicę
echo 'abc:fjk' |sed 's/.*:/john.doe/g'
i do usunięcia
echo 'abc:fjk' |sed 's/.*://g'
^
Kotwica ma znaczenia w przypadku, gdy którakolwiek Pytanie lub w Twojej przykładzie sprawy. Każdy adres zaczynający się od /.*
implikuje ^
.
awk
, dlaczego po prostu nie zrobićawk -F:
?