откусить кусочек текста (cut?)

Модератор: Модераторы разделов

George Shot
Сообщения: 34
ОС: All

откусить кусочек текста

Сообщение George Shot »

от теста вида 123/ttt/mmmm/dd/xxx нужно оставить только последние три секции чтоб осталось mmmm/dd/xxx
таких строчек туева хуча, глубина вложенности ессно разная
первое что приходит в голову - сделать cut
но cut умеет отсчитывать только с начала строки, а сколько надо пролистать / до нужной секции - неизвестно
известно только что нужно оставить последние три
таки как?
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: откусить кусочек текста

Сообщение bormant »

rev | cut | rev ?
$ echo test5/test4/test3/test2/test1 | rev | cut -d / -f 1-3 | rev
test3/test2/test1
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: откусить кусочек текста

Сообщение rm_ »

Код: Выделить всё

EMAN
selif ro elif a fo senil esrever - ver

SISPONYS
]... elif[ ver

NOITPIRCSED
,tuptuo dradnats eht ot selif deificeps eht seipoc ytilitu ver ehT
‐iceps era selif on fI  .enil yreve ni sretcarahc fo redro eht gnisrever
.daer si tupni dradnats eht ,deif

Про rev не знал, спасибо. :D
Спасибо сказали:
Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: откусить кусочек текста

Сообщение uptime »

Довольно грязно, но это первое, что пришло в голову:
1) берем строку
2) прогоняем через cut, оставляя только разделители "/"
3) подсчитываем байты, узнаём количество полей
4) снова через cut, но теперь мы знаем, с которого поля надо стартовать
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:
George Shot
Сообщения: 34
ОС: All

Re: откусить кусочек текста

Сообщение George Shot »

bormant писал(а):
23.10.2008 15:02
rev | cut | rev ?


мегамозг! :ph34r:
изящно как все и просто :rolleyes:
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: откусить кусочек текста

Сообщение diesel »

Код: Выделить всё

diesel@indie:~$ echo "123/ttt/mmmm/dd/xxx" | awk -F/  '{OFS="/"}{ print $(NF-2),$(NF-1),$(NF);}'
mmmm/dd/xxx

нафиг cut?
Спасибо сказали:
Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: откусить кусочек текста

Сообщение Folderx »

вот тоже

Код: Выделить всё

[guest@localhost ~]$ S1="123/ttt/mmmm/dd/xxx"
[guest@localhost ~]$ S2="123/ttt/mmmm/dd/xxx/123/ttt/mmmm/dd/xxx"
[guest@localhost ~]$ expr "$S1" : ".*/\(.*/.*/.*\)"
mmmm/dd/xxx
[guest@localhost ~]$ expr "$S2" : ".*/\(.*/.*/.*\)"
mmmm/dd/xxx
[guest@localhost ~]$
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: откусить кусочек текста

Сообщение Voice »

Да вариантов реализации много можно придумать. Вот еще:

$ echo test5/test4/test3/test2/test1 | grep -Eo '\w+\/\w+\/\w+$'
test3/test2/test1
$
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали: