Eu também sou relativamente novo no regex, mas como ninguém respondeu, vou tentar. O operador de tubos "|" é usado para um operador OR.
O seguinte REGEX deve levá-lo a algum lugar.
.+((JPG)$|(JPEG)$)
(Combine qualquer coisa uma ou mais vezes seguido por "JPG" ou "JPEG" no final)
Resposta estendida (editada depois de aprender um pouco sobre (e) grep): Supondo que você tenha uma pasta com os seguintes arquivos:
test.jpeg, test.JpEg, test.JPEG, test.jpg, test.JPG, test.notimagefile, test.gif
(não é criativo com nomes ...)
Primeiro, começamos definindo o que sabemos sobre nosso padrão: Sabemos que estamos procurando o final do nome. Logo, usamos o operando "$" para definir que cada linha deve terminar com o padrão definido. Sabemos que o padrão precisa ser JPEG ou JPG. Para isso, usamos o pipeline "|" como um ou operando. Nosso padrão é agora:
((JPEG)|(JPG))$
(Corresponder a qualquer linha que termine com "JPEG" ou "JPG")
No entanto, vemos que neste exemplo, a única diferença é o opcional "E". Para isso, podemos usar o "?" operando (que significa opcional). Nós escrevemos:
(JP(E)?G)$
(Mach qualquer arquivo que termine com um padrão como: "J", seguido por "P", seguido por um opcional "E", seguido por um "G").
No entanto, também gostaríamos de corresponder arquivos com letras minúsculas no nome do arquivo. Para isso, apresentamos a classe de caracteres "[...]". significado corresponde a um dos seguintes. Nós escrevemos:
([jJ][pP]([eE])?[gG])$
(Combine qualquer arquivo que termine com um padrão como: "j" ou "J", seguido por "p" ou "P", seguido por um opcional "e" ou "E", seguido por "g" ou " G ") (Isso também pode ser feito usando a opção "-i" no grep, mas eu tomei isso como um exercício no REGEX)
Finalmente, uma vez que (esperamos) começarmos a ver um padrão, podemos omitir os parênteses desnecessários. Como há apenas uma letra opcional ("E"), podemos omitir essa. Além disso, como o arquivo só tem esse padrão para terminar, podemos omitir os parênteses inicial e final. Assim, nós simplesmente conseguimos:
[jJ][pP][eE]?[gG]$
Finalmente; vamos supor que você também queira encontrar arquivos com o tipo ".gif", podemos adicionar isso como um segundo parâmetro:
([jJ][pP][eE]?[gG])|([gG][iI][fF])$
(Aqui eu adicionei novamente parênteses extras para legibilidade / agrupamento. Sinta-se livre para removê-los se eles parecerem ofuscantes.)
Finalmente, usei ls e um pipeline para enviar todos os nomes de arquivos para (e) grep:
ls | egrep '([jJ][pP][eE]?[gG])|([gG][iI][fF])$'
Resultado:
test.gif
test.JPG
test.JpEg
test.JPEG
test.jpg
test.JPG
Segunda edição: Usando a opção -i e omitindo parênteses, podemos reduzi-lo para apenas:
ls | egrep -i 'jpe?g|gif$'