Как можно использовать sed для замены пробелов точками и при этом сохранить () и []

Или вы можете попробовать:

find. -type f -name "*-XYZ12*" | sed 'p;s/\(-XYZ12\)\{1,\}/-XYZ12/' | xargs -n2 mv

См. тему

0
18.10.2019, 00:14
2 ответа

Поместите закрывающий ], который вы хотите сопоставить, сразу после отрицания ^, где это не будет неверно истолковано. Вы можете использовать \+в конце регулярного выражения, чтобы заменить несколько символов одной точкой (, спасибо @Rakesh Sharma):

$ echo 'Some Movie Name! (2015) [1080p]' | sed -e 's/[^][A-Za-z0-9()]\+/./g'
Some.Movie.Name.(2015).[1080p]
0
28.01.2020, 02:39

Основываясь на наблюдениях @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. 
1
28.01.2020, 02:39

Теги

Похожие вопросы