Bash Pattern Matching

Bash Pattern Matching

A correspondência de padrões de bash é um conceito indispensável que é útil ao selecionar diferentes nomes de arquivos de um diretório e verificar se uma string corresponde a um determinado formato. Esteja você começando com a correspondência de padrões Bash ou procurando aprimorar suas habilidades, este guia cobre as várias maneiras e dicas para correspondência de padrões.

Correspondência de padrões

Bash oferece principalmente dois tipos de correspondência de padrões: Globs e Globs estendidos. Os dois oferecem maneiras simples para os usuários selecionarem os nomes de arquivos e verificar as diferentes seqüências de seqüências contra regras específicas. No entanto, Bash também suporta usar regex, Especialmente ao trabalhar com scripts para validar vários dados de entrada e análise de usuários.

1. Bash Pattern Combation com globs

A correspondência de padrões do GLOB envolve principalmente verificações de arquivos específicos em um determinado diretório. Eles são referidos como curingas. Existem três tipos de padrões de Bash Glob:

2. Asterisk (*)

É usado quando você deseja combinar zero ou mais nomes de arquivos.

Vamos fazer alguns exemplos.

Verificando os nomes de arquivos começando ou terminando com um determinado personagem

Por exemplo, se precisamos procurar um arquivo começando com eu ou li, Poderíamos usar os seguintes comandos:

ls l*
ls li*

Observe como ele corresponde a todos os nomes de arquivos que começam com Li ou L no diretório atual, incluindo os diretórios.

Para combinar apenas com os diretórios, adicione o / depois do curinga, conforme mostrado no seguinte:

Da mesma forma, se precisamos corresponder aos nomes de arquivos esse fim com um determinado personagem ou personagens, poderíamos usar o curinga como mostrado na ilustração a seguir. Neste exemplo, combinamos os nomes de arquivos que terminam com e.

ls *e

Suponha que você não tenha certeza do nome do arquivo que deseja procurar, mas conhece os personagens especificados. Como no exemplo seguinte, você ainda pode corresponder aos nomes de arquivos adicionando o curinga antes e depois dos personagens.

Combinamos os nomes de arquivos que incluem o Nux palavra -chave em seu nome.

Verificando arquivos com uma determinada extensão

Com a correspondência de padrões Bash, você pode localizar os arquivos com uma determinada extensão. Por exemplo, se você deseja encontrar todos os PDFs ou arquivos de texto. Nesse caso, você adiciona o curinga antes da extensão do arquivo. Vamos ver o exemplo a seguir para corresponder a todos os arquivos de texto:

LS *.TXT

Todos os arquivos de texto são correspondidos como mostrado no seguinte:

3. Ponto de interrogação (?)

O ponto de interrogação curinga corresponde aos nomes de arquivos que correspondem a um único caractere. No entanto, você deve saber o número de caracteres que um determinado nome de arquivo tem, de modo que cada um “?”Representa cada personagem.

Por exemplo, para combinar um nome de arquivo com quatro caracteres, mas conhecemos o último personagem, poderíamos ter o seguinte exemplo:

ls ???e

Da mesma forma, para encontrar uma determinada extensão em que você conhece o número de caracteres do nome do arquivo, poderíamos usar o seguinte comando:

ls ?????.TXT

4. Suportes quadrados []

Quando você deseja uma pesquisa mais específica, como combinar os nomes de arquivos que contêm os caracteres dados, os caracteres a corresponder podem ser adicionados entre colchetes quadrados.

Por exemplo, para corresponder aos nomes de arquivos que contêm caracteres ou números especificados, independentemente da extensão, podemos ter o seguinte comando:

LS [e-m]*.*

Aqui, combinamos os nomes de arquivos que contêm qualquer caractere de E a M e tem qualquer extensão.

Se você quisesse combinar os nomes de arquivos que começam com caracteres específicos, digamos começar com [F-L] e ter uma determinada extensão, poderíamos usar o seguinte padrão:

LS [f-l]*.TXT*

5. Bash Pattern Comparating com globs estendidos

Globs estendidos têm uma enorme semelhança com expressões regulares. No entanto, eles são desligados por padrão. Quando você deve usá -los, você deve ativá -los usando o seguinte comando:

$ shopt -s extlob

Os globos estendidos incluem:

6. ?(padrões)

É usado ao combinar com zero ou um ocorrência do padrão especificado.

Por exemplo, se você deseja combinar todos os nomes de arquivos com uma determinada extensão ou aqueles que contêm caracteres específicos em sua nomeação, poderíamos ter o seguinte comando:

$ ls ?(* Nux* |*.sh)

7. *(padrões)

É usado ao combinar com zero ou mais ocorrências do padrão especificado.

Por exemplo, poderíamos usar o seguinte comando para corresponder aos nomes de arquivos que começam com zero ou mais "F" e são arquivos de texto:

$ ls *(f).TXT

8. +(padrões)

É usado ao combinar com um ou mais ocorrências do padrão especificado.

Se executarmos o comando anterior, observe que ele corresponde apenas aos nomes de arquivos que devem conter pelo menos um "f", o que significa que o .TXT O arquivo não será uma correspondência.

$ ls +(f).TXT

9. @(padrões)

É usado ao combinar com uma ocorrência do padrão especificado.

Se precisarmos apenas corresponder aos nomes de arquivos que contêm apenas um "f" usando o mesmo padrão usado no exemplo anterior, poderíamos usar o @ como mostrado no seguinte:

$ ls @(f).TXT

10. !(padrões)

É usado quando você deseja combinar tudo o que não corresponde ao padrão especificado.

Vamos ter um exemplo em que queremos corresponder a todos os nomes de arquivos que não têm o padrão especificado. Neste exemplo, combinamos todos os nomes de arquivos que não são arquivos de texto ou scripts de bash. O comando é o seguinte:

$ ls !(*.txt |*.sh)

Conclusão

Este guia apresentou a correspondência de padrões e os vários exemplos para garantir que você entenda como trabalhar com as várias opções de correspondência de padrões. Usando essa base, você pode avançar com o padrão de batida e usar a mesma lógica quando deseja corresponder aos vários padrões no terminal ou ao criar os scripts de bash.