Заменить все строки в vim на то, что находится после последнего слеша в строке

Заменить все строки в vim на то, что находится после последнего слеша в строке

У меня есть такие примеры данных:

aaa/bbb/ccc/ddd/eee/fff
aaa/bbb/ccc/ddd/eee/fff/gg
aaa/bbb/ccc/ddd/eee/fff/gg/hhhhh

Как я могу разобрать только:

fff
gg
hhhhh

с vim или bash?

Спасибо

решение1

Вы можете использовать awk. Вам нужно последнее поле, но у вас другой разделитель.

-F : --разделитель-полей.

Awk NF выдает общее количество полей в записи. Поэтому, когда я говорю NF, я имею в виду номер последнего поля или его индекс. Таким образом, {print $NF} аналогичен {print $1} или {print $2}.

➜  awk -F'/' '{print $NF}' test.txt
fff
gg
hhhhh

решение2

В Vim вы можете использовать следующую команду, чтобы удалить все перед последней косой чертой ( /):

:%s/.*\///

Вы можете сделать что-то подобное с помощью sed:

sed 's/.*\///' file

решение3

Bash, вероятно, не лучший выбор для этого:

mapfile -t < data; printf %s\\n "${MAPFILE[@]##*/}"

Связанный контент