В вашем шаблоне .
соответствует любому символу, а не только буквальной точке. Чтобы этого избежать, вам нужно избежать его с помощью обратной косой черты. С другой стороны, ваше другое решение удаляет все точки из имен файлов, то есть a.b.sh
становится ab
. Я предлагаю следующую альтернативу:
find . -name '*.sh' | sed 's,^./,,g' | sed 's/.sh$//'
Обратите внимание на ^
, которое соответствует началу строки, и $
, которое соответствует концу.
Но еще лучше использовать только одну команду sed
:
find . -name '*.sh' | sed 's,^./\(.*\).sh$,\1,'