Удалить часть строки в 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) - вывести предпоследнее поле