Jak zastąpić następujący ciąg
hd_ma_prod_customer_ro:*:123456789:john.doe
z Johnem Doe
Zasadniczo muszę poszukać ostatniego dwukropka (:) i usunąć wszystko przed i włącznie.
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
, dlaczego po prostu nie zrobićawk -F:
?awk
. Zasadniczo próbuję przetestować polecenia, które pierwotnie otrzymałem w odpowiedzi i próbuję je zmodyfikować zgodnie z wymaganiami użytkownika. :)-F
Opcjaawk
określa separator pól. Jeśli zdecydujeszawk
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
:źródło
Proszę spróbować
edycja: usunięto kotwicę
i do usunięcia
źródło
^
Kotwica ma znaczenia w przypadku, gdy którakolwiek Pytanie lub w Twojej przykładzie sprawy. Każdy adres zaczynający się od/.*
implikuje^
.