Остерегайтесь предложенного решения Perl: оно удаляет что-либо после первой точки.
$ echo some.file.with.dots | perl -pe 's/\..*$//;s{^.*/}{}'
some
Если вы хотите сделать это с Perl, это работает:
$ echo some.file.with.dots | perl -pe 's/(.*)\..*$/$1/;s{^.*/}{}'
some.file.with
Но если вы используете Bash, решения с y=${x%.*}
(или basename "$x" .ext
, если вы знаете расширение) намного проще.