Поместите закрывающий ]
, который вы хотите сопоставить, сразу после отрицания ^
, где это не будет неверно истолковано. Вы можете использовать \+
в конце регулярного выражения, чтобы заменить несколько символов одной точкой (, спасибо @Rakesh Sharma):
$ echo 'Some Movie Name! (2015) [1080p]' | sed -e 's/[^][A-Za-z0-9()]\+/./g'
Some.Movie.Name.(2015).[1080p]
Основываясь на наблюдениях @Glenn Jackman, метод изменен на следующий:
$ printf '%s' "$string" | tr -cs '[:alnum:].[]()'
° -c => invert/complement the input set
° -s => will squeeze consecutive characters from the complemented input set found in the data to a single dot character.