Mam ciąg oddzielony spacją, który jest wyprowadzany przez polecenie, do którego lubię przesyłać potoki cut
, używając -fd ' '
podziału na spacje. Wiem, że mogę użyć -f <n>
do wyświetlenia numeru pola <n>
, ale czy mogę ustawić wyświetlanie ostatniego pola, jeśli nie znam długości ciągu?
Czy też muszę korzystać z bardziej elastycznego narzędzia do edycji tekstu, takiego jak sed
lub awk
?
command-line
cut-command
Arroniczny
źródło
źródło
-n
sprawia, że n od początku,n-
jest od n do końca, i istnieje--complement
opcja, która odwraca wybór. Ale nie ma sposobu, aby policzyć liczbę pól i działać na ich podstawie, o ile mogę powiedzieć.Odpowiedzi:
Nie,
cut
nie mogę tego zrobić. Możesz użyć dwóchrev
poleceń, takich jakale zwykle jest łatwiejszy w użyciu
awk
:źródło
Możesz to zrobić tylko za pomocą powłoki, nie jest potrzebne żadne narzędzie zewnętrzne, używając rozszerzenia parametrów:
var##*
odrzuci wszystko od początku do ostatniej spacji z parametru (zmienna)var
.Jeśli separatorem może być dowolny biały znak, np. Spacja lub tabulator, użyj klasy znaków
[:blank:]
:Przykład:
źródło
Osobiście podoba mi się odpowiedź Floriana Diescha. Ale jest i ta droga.
Wyjaśnienie:
wc -w
podaje liczbę słów. icut
tnie ostatnie słowoEDYTOWAĆ:
Wymyśliłem inny sposób:
źródło
a="my string here"
, mógłbym również użyć rozszerzenia parametrów${a##* }
.Oto jeden za pomocą
grep
Jak to działa:
-o
Drukuj tylko pasujące (niepuste) części pasującej linii.[^ ]*$
dopasowuje wszystko od końca, aż do znalezienia spacji.Kolejna wkładka od glenn jackman za pomocą perla
źródło