Удалить часть строки в bash(regexp?)?

На входе имеем string: "/path/t/o/filename.mp3" или "/path/t/o/filename.wav" и тд(различные расширения). На выходе нужно получить только filename. Как это сделать средствами bash и GNU утилит(и возможно ли)?


Ответы (2 шт):

Автор решения: Aleksey Vaganov

На входе можно даже иметь список путей и обрабатывать их потоковым текстовым редактором sed. Пример использования для вашего случая:

echo "/path/t/o/filename.wav" | sed -re 's#^.*/([^/.]+)\.[^.]+$#\1#'

В этой команде s#^.*/([^/.]+)\.[^.]+$#\1# означает:

s - делать поиск и замену

^.*/([^/.]+)\.[^.]+$ регулярка что ищем и захватываем

\1 заменяем, то что нашли на захваченный шаблон

# символ разделитель

→ Ссылка
Автор решения: Zt.
echo "/path/t/o/filename.wav" | awk -F'[/.]' '{print $(NF-1)}'

-F'[/.]' - установить разделителем полей -- слэш(/) и точку(.)

$(NF-1) - вывести предпоследнее поле

→ Ссылка