AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 439875
Accepted
user9303970
user9303970
Asked: 2018-04-25 20:08:02 +0800 CST2018-04-25 20:08:02 +0800 CST 2018-04-25 20:08:02 +0800 CST

Por que não ver shell globs como um "dialeto" de regex? [duplicado]

  • 772
Esta pergunta já tem respostas aqui :
Como as expressões regulares diferem dos curingas usados ​​para filtrar arquivos (2 respostas)
Fechado há 4 anos .

Costumo confundir globs de shell do Bash 3.x:

?      # Match any single character.
*      # Match any string of characters (up until the asterisk).
[set]  # Match any character in set (but not the entire set itself).
[!set] # Match any character not in set.

com regex (especialmente PCRE ).

Minha pergunta é por que não vê-los como "Bash regex" (assim como temos "JavaScript regex" por exemplo)?

Por que não vê-los apenas como outro "dialeto" do regex?

Claro que seria pouco ortodoxo, mas não tenho certeza de que não haja nenhuma razão lógica formal para não fazê-lo.

bash regular-expression
  • 2 2 respostas
  • 748 Views

2 respostas

  • Voted
  1. Best Answer
    Kusalananda
    2018-04-25T21:34:16+08:002018-04-25T21:34:16+08:00

    Padrões de globbing de nomes de arquivo e expressões regulares têm uma sobreposição de sintaxe, até certo ponto, mas funcionam de maneiras fundamentalmente diferentes.

    A expressão regular ecorresponderá (dentro) à string hello, enquanto o padrão de globbing do nome do arquivo enão. Padrões globbing são ancorados implicitamente, então o padrão glob eseria equivalente a uma expressão regular parecida com ^e$, mas sua aplicação pode ser diferente (a expressão regular corresponderia a uma linha completa em um texto, enquanto o padrão glob normalmente corresponderia a um único nome de arquivo).

    Os padrões de globbing de nome de arquivo também não possuem nenhum caractere especial que qualifique a expressão anterior, como *ou ?em uma expressão regular, ou qualquer facilidade para agrupar partes de expressões como (...)em uma expressão regular ou para alternar entre possíveis subpadrões como |faz em uma expressão regular. Alguns shells obviamente adicionam um pouco disso, como basho shopt -s extglobhabilitado, por exemplo.

    Os padrões globbing têm uso diferente das expressões regulares. As expressões regulares são usadas principalmente para selecionar/combinar strings de textos, enquanto os padrões de globbing de nome de arquivo são usados ​​principalmente (mas não exclusivamente) para combinar nomes de arquivos ou gerar listas de nomes existentes de um diretório. Padrões de globbing são usados ​​para corresponder strings , por exemplo case ... esac, mas um shell POSIX nunca usa expressões regulares para gerar listas de nomes de um diretório, a menos que seja estendido com esse recurso.

    Ambos os tipos de padrões são definidos pelo padrão POSIX:

    • Expressões regulares e sua gramática são especificadas no Capítulo 9 do volume POSIX Base Definitions
    • Padrões usados ​​para expansão de nome de arquivo são definidos em algumas seções na seção Pattern Matching Notation do capítulo Shell Command Language do volume Shell & Utilities .

    Dos padrões globbing, o padrão começa dizendo

    A notação de correspondência de padrão descrita nesta seção é usada para especificar padrões para strings correspondentes no shell. Historicamente, a notação de correspondência de padrão é relacionada, mas ligeiramente diferente da notação de expressão regular descrita em XBD Regular Expressions . Por esse motivo, a descrição das regras para essa notação de correspondência de padrão é baseada na descrição da notação de expressão regular, modificada para levar em conta as diferenças.

    Existem vários "dialetos" de expressões regulares, como PCRE que você mencionou, mas os padrões de globbing de nome de arquivo não podem realmente ser considerados um deles.

    Existem várias linguagens de padrão que são semelhantes aos padrões de globbing de nome de arquivo do shell, como os padrões usados ​​em consultas SQL com LIKE. Todos eles são bastante simples e geralmente fornecidos como uma maneira conveniente de combinar bits de strings. As expressões regulares são, em comparação, muito mais complexas.


    Você mencionou " bashexpressões regulares". O bashshell suporta expressões regulares, mas não para correspondência de nome de arquivo. Dentro [[ ... ]]de , o =~operador executa uma correspondência de expressão regular da string do lado esquerdo com a expressão regular do lado direito. O tipo de expressões regulares que o bashshell suporta dessa maneira é o conjunto estendido padrão de expressões regulares. Consulte o bashmanual do seu sistema para obter mais informações sobre isso.

    • 3
  2. l0b0
    2018-04-25T21:11:05+08:002018-04-25T21:11:05+08:00

    Globs e expressões regulares são duas linguagens de padrão distintas. O fato de haver alguma sobreposição na semântica de certos padrões não significa que um seja necessariamente um "dialeto" do outro. Todos que já usaram ambos reconhecem a semelhança, mas manter os nomes distintos reduz a possibilidade de confusão.

    Em uma nota relacionada, acho lamentável que tantos tipos de expressões regulares (pelo menos básicas, estendidas e Perl com variações) tenham nomes muito semelhantes. A maioria das pessoas em minha experiência não qualifica a quem elas se referem, às vezes causando confusão desnecessária. Se esses sabores tivessem nomes muito mais distintos, poderia ter sido mais fácil falar sobre eles sem mal-entendidos.

    • 2

relate perguntas

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve