Na seção anterior , aprendemos sobre cálculo de variável, substituição de conteúdo de variável e arquivos de configuração de variável de ambiente no Bash Shell. Depois de compreender as variáveis e operações / operações relacionadas, esta seção começa, aprenderemos juntos sobre o processamento de strings no Shell. Como alguns comandos do Bash oferecem suporte a expressões regulares, também entenderemos os fundamentos das expressões regulares. uso
Introdução às expressões regulares
Expressão regular é um modo de correspondência de string, que é usado para corresponder strings qualificadas em um arquivo. Regular inclui correspondência (correspondência se a linha do arquivo contiver condições). Expressões regulares podem ser usadas para corresponder a requisitos mais complexos. grep
awk
sed
O comando suporta expressões regulares.
Os curingas também usados no Shell são usados para corresponder aos nomes de arquivo que atendem às condições. É uma correspondência completa e ls
find
cp
não oferece suporte a expressões regulares. Apenas curingas podem ser usados. As condições de correspondência para curingas são relativamente simples.
Metacaracteres de expressão regular básica
Metacaractere | efeito |
---|---|
* | Corresponde ao caractere anterior 0 ou qualquer número de vezes |
\ + | Corresponde ao caractere anterior 1 vez ou qualquer número de vezes |
. | Corresponde a qualquer caractere, exceto nova linha |
^ | Corresponde ao início da linha. Corresponder as linhas que começam com o seguinte texto |
$ | Corresponde ao final da linha, ou seja, a linha que termina com o seguinte texto |
[] | Corresponde a qualquer caractere (apenas um) especificado nos colchetes, o mesmo que curinga |
[^] | Negar, combinar qualquer caractere, exceto os caracteres entre colchetes, o mesmo que curinga |
\ | Caractere de escape, cancele o significado de símbolos especiais |
\ {n \} | Indica que o caractere antes dele aparece exatamente n vezes |
\ {n, \} | Indica que o caractere anterior aparece pelo menos n vezes |
\ {n, m \} | Indica que o caractere antes dele aparece pelo menos n vezes e no máximo m vezes. |
Uso de metacaracteres e precauções
-
Para
*
\+
dois metacaracteres (por exemplo"a*"
), não faz sentido ser independente como condição de correspondência. Por causa das características de correspondência, pode ser"aa*"
usado"a"
como uma maneira conveniente de substituir. Este metacaractere é geralmente usado para a repetição de um único caractere dentro de uma palavra. Por exemplo,Para combinar palavras semelhantes a "uuuuuuuraaaaa" (
u
coma
quantidade desconhecida), você pode usar"u*ra*"
condições de correspondência -
O metacaractere no início da linha deve estar no primeiro lugar, por exemplo
"^abc"
; o metacaractere no final da linha deve estar no último lugar, por exemplo"abc$"
-
.
Equivalente a curinga?
, pode corresponder a qualquer caractere, incluindo caracteres vazios -
Os metacaracteres de colchetes podem usar um conjunto enumerado ou usar um sinal de menos para
-
conectar o início e o final do intervalo , como correspondência de todas as letras minúsculas"[a-z]"
e correspondência de caracteres não numéricos"[^0-9]"
. Apenas para um personagem -
Deve haver um caractere de escape no lado esquerdo das chaves (independentemente de esquerda e direita)
\
-
Em relação ao metacaractere chave: não é o número de caracteres que aparecem em uma linha, mas o número de caracteres que aparecem continuamente. Não faz sentido definir o valor máximo quando usado de forma independente como uma condição de correspondência. Ainda assim, pode-se considerar que a linha não contém mais do que Máximo de caracteres repetidos
Cenários de aplicação de expressão regular
Existem muitos comandos que suportam expressões regulares. Abaixo, selecione os comandos de pesquisa de string mais comumente usados grep
para demonstração de exemplo
#grep命令语法
grep [mode] [options] <pattern> <filename>
#描述模式的匹配类型 模式 文件名
- Tipo de correspondência de padrão
Tipo de Padrão | efeito |
---|---|
-E | Expressão regular estendida |
-F | Corda |
-G | Expressão regular básica (tipo de padrão padrão) |
-P | Expressão regular Perl |
grep
Opções comuns de comando
Opções | Descrição |
---|---|
-n | Exibir a linha correspondente enquanto exibe o número da linha |
-b | Exibir deslocamento de byte (os primeiros caracteres) |
-Eu | Ignorar maiúsculas e minúsculas ao combinar |
-v | A condição de correspondência é revertida e as linhas que não correspondem à condição são exibidas |
- O modo de correspondência é a condição de correspondência, e as linhas que atendem às condições serão filtradas e exibidas
grep
Os comandos também suportam barras verticais (comumente usados) e entrada do console. A entrada do console termina comctrl
+d
(várias linhas são permitidas, portanto, não podeenter
terminar com)- O padrão de correspondência deve ser colocado entre aspas duplas
""
, caso contrário, o resultado da pesquisa pode produzir erros
Exemplo de expressão regular
Primeiro crie um arquivo com parte do material, edite como quiser
#以下内容存储在测试素材文件a中
Hello!
I am Zheng@Kali
The excutible files' extension in windows is .exe
I am a enthusiastic man.
My Phone number is 13957191293.
isn't it a good idea?
eeee
uuuuuuraaaaa! uuuraaaa!
-
Número de telefone correspondente
O primeiro dígito do número do telefone celular geralmente é 1, o segundo dígito geralmente é de 3 a 8 e os últimos nove dígitos são arbitrários
zheng@Kali:~/temp$ grep "1[3-8][0-9]\{9\}" a
My Phone number is 13957191293.
#匹配模式一定要用""包含
-
Encontre a linha começando com i
grep "^i" a isn't it a good idea? grep -i "^i" a #使用忽略大小写选项 I am Zheng@Kali I am a enthusiastic man. isn't it a good idea?
-
*
+
Exemplos de metacaracteresO conteúdo da amostra é o mesmo que uso e precauções
zheng@Kali:~/temp$ grep "u*ra*" a My Phone number is 13957191293. uuuuuuraaaaa! uuuraaaa! zheng@Kali:~/temp$ grep "u*ra\+" a #使用 + 元字符一定要使用转义符,否则相当于直接匹配加号 uuuuuuraaaaa! uuuraaaa!
Nota: Se u e a não aparecerem no exemplo acima, se o caractere no padrão correspondente não aparecer na linha, ele ainda pode corresponder, e + não pode corresponder *
A próxima seção, programação do Linux Bash Shell (7): interceptação e processamento de strings (cut, printf, awk, sed) Aprenderemos sobre a interceptação de strings, saída e comandos de processamento
em bash. A seção anterior, programação do Linux Bash Shell (5) ): Variável (abaixo) operação variável, substituição de conteúdo, arquivo de configuração de variável de ambiente