Так что вопрос был недействительным. Но ответ, который является ответом на другой вопрос, поучителен.
этот шаблон работал
'.*[^~]$'
Во-первых, не было необходимости избегать символов, от которых я сбежал, как говорит @Wiktor в своем комментарии выше.
Путаница закончилась тем, насколько простым является базовое регулярное выражение bash. В этом отношении приведенная выше картина не совсем так, как кажется.
. * Не значит найти все как обычно. * на свои средства найди все. . просто соответствует точке. Итак. * Означает найти что-то с. сопровождаемый чем-либо.
Чтобы быть более точным, фактический образец, который я использую, больше похож на это:
'abc.*[^~]$'
... найти все файлы с именем, начинающимся с abc. и заканчивается чем-нибудь, кроме ~.
Как ни странно, это не похоже на работу:
'^abc.*[^~]$'