Jak usunąć cały tekst po znaku, w tym przypadku dwukropkiem („:”), w bash? Czy mogę też usunąć okrężnicę? Nie mam pojęcia, jak to zrobić.
147
Przykład mógłby być przydatny, ale jeśli dobrze cię zrozumiałem, zadziałałoby:
echo "Hello: world" | cut -f1 -d":"
Spowoduje to konwersję „hello: world” na „hello”.
cut
działa, ale odpowiedź I Dennisa jest lepsza i bardziej elastyczna. Czy ktoś wie, czy wywołuje nowy proces, taki jakcut
?basename
icut
, zobacz odpowiedź Dennisa poniżejcut
może czytać ze standardowego wejścia, więc jest to lepsze, zwłaszcza gdy masz bardzo długi ciąg znaków, który musisz przetworzyć, np. zawartość pliku.hello: world
. To połowa odpowiedzi.W Bash (i ksh, zsh, myślnik itp.) Możesz użyć interpretacji parametrów,
%
która usunie znaki z końca łańcucha lub#
usunie znaki z początku łańcucha. Jeśli użyjesz jednego z tych znaków, najmniejszy pasujący ciąg zostanie usunięty. Jeśli podwoisz znak, najdłuższy zostanie usunięty.źródło
hello:world
będziehello:wo
, używając${a%:*}
?"${a##*:}"
za zdobycie tylkotomorrow
=)a='hello:world:of:tomorrow'; pattern=''^([^:]*:).*$'
; [[$ a = ~ $ wzór]]; echo "$ {BASH_REMATCH [1]}" ". To pasuje tylko do dwukropka. Jeśli chcesz, aby było to opcjonalne, musisz użyć innego wzorca. Wyjaśnienie wyrażeń regularnych Bash (i ogólnie wyrażeń regularnych) wykracza poza zakres tych komentarzy. Możesz znaleźć inne pytania, które omawiają ten problem lub opublikować własne.źródło
źródło
egrep
jest grep with-E
. Tutaj nie ma różnicy od zwykłegogrep
.-o
nakazuje grep wydrukować tylko część wiersza, która pasuje do wyrażenia.^
zakotwicza dopasowanie na początku wiersza.[^:]*
dopasowuje zero lub więcej znaków, które nie są tym:
znakiem.:
pasuje do znaku:
.Załóżmy, że masz ścieżkę z plikiem w tym formacie:
Teraz potrzebujesz tylko ścieżki, która zawiera cztery „/”. Rodzaj
a twoje wyjście będzie
Zaletą używania cut jest to, że możesz również wyciąć katalog uppest, a także plik (w tym przykładzie), więc jeśli wpiszesz
Twój wynik byłby
Chociaż możesz zrobić to samo z drugiej strony ciągu, nie miałoby to większego sensu w tym przypadku, jak pisanie
prowadzi do
W innych przypadkach ostatni przypadek może być również pomocny. Pamiętaj, że na początku ostatniego wyjścia nie ma znaku „/”.
źródło
odetnij wszystko po ostatnim wystąpieniu „:”
i jeśli chcesz porzucić to ostatnie „:”
@ kp123: którą chcesz zamienić
:
z/
(gdzie sed jelita grubego powinny być\/
)źródło