Expressão regular
As expressões regulares são divididas em expressões regulares básicas e expressões regulares estendidas. Não é um programa de ferramenta, mas uma base padrão para o processamento de strings. Ele usa uma única string para pesquisar e combinar uma série de strings que atendem a uma determinada regra gramatical.
Definição de expressão regular
- A expressão regular também é chamada de expressão regular, expressão regular
- Use strings para descrever e combinar uma série de strings que atendem a uma determinada regra
- A composição das expressões regulares:
-caracteres ordinários: letras maiúsculas e minúsculas, números, sinais de pontuação e alguns outros símbolos
-Metacaracteres: caracteres especiais com significado especial em expressões regulares - Ferramentas que suportam expressões regulares:
-vi editor: suporta expressões regulares básicas; não suporta expressões regulares estendidas
-grep: suporta expressões regulares básicas; não suporta expressões regulares estendidas
-egrep: suporta expressões regulares básicas; suporta Expressões regulares estendidas
-sed: oferece suporte a expressões regulares básicas; não oferece suporte a expressões regulares estendidas
-awk: oferece suporte a expressões regulares básicas; oferece suporte a expressões regulares estendidas
Expressão regular básica
- Expressões regulares básicas são partes de expressões regulares comumente usadas
- Além de caracteres comuns, metacaracteres comuns:
Metacaractere | efeito |
---|---|
\ | O caractere de escape é usado para cancelar o significado de símbolos especiais, por exemplo: \! , \ N |
^ | A posição inicial do caractere correspondente; por exemplo: ^ palavra corresponde à linha que começa com palavra |
$ | A posição final do caractere correspondente; por exemplo: palavra $ corresponde à linha que termina com palavra |
. | Corresponde a qualquer caractere, exceto \ n (nova linha) |
* | Corresponde à subexpressão anterior 0 ou mais vezes |
[Lista] | Corresponde a um caractere da lista; por exemplo: [0-9] corresponde a qualquer dígito |
[^ list] | Corresponde a um caractere que não está na lista; por exemplo: [^ 0-9] corresponde a qualquer caractere diferente de dígito |
\ {n \} | Corresponde à subexpressão anterior n vezes; por exemplo: [0-9] \ {2 \} corresponde a dois dígitos |
\ {n, \} | A subexpressão que corresponde a macarrão monetário não é inferior a n vezes; por exemplo: [0-9] \ {2, \} significa dois ou mais dígitos |
\ {n, m \} | Corresponde à subexpressão precedente n a m vezes; por exemplo: [az] \ {2,3 \} corresponde a duas a três letras minúsculas |
[] | Conjunto de caracteres; corresponde a qualquer caractere contido; por exemplo: "[abc]" pode corresponder ao "a" em "[abc]" |
[n1-n2] | Intervalo de caracteres; corresponde a qualquer caractere não incluído |
Pegue a ferramenta grep e o arquivo / etc / passwd como exemplos e dê alguns exemplos:
grep root /etc/passed :筛选文件中包含root的行
grep ^root /etc/passwd :筛选出以root开头的行
grep bash$ /etc/passwd :筛选出以bash结尾的行
grep -v root /etc/passwd :筛选文件中不包含root的行
grep 'r..d' /etc/passwd :筛选出 r 和 d 之间有两个字符的行
grep '[^s]bin' /etc/passwd :筛选 bin 前面不是 s 的行
grep “^$” /etc/passwd :筛选出空白行,没有空白行的所以没输出
grep 't[es]' /etc/passwd :筛选包含字符串 te 或 ts 的行
grep '0\ {1,\}' /etc/passwd :查找数字 0 出现1次以上
grep -e "ntp" -e "root" /etc/passwd :-e 参数查找多个模式
"*" significa qualquer caractere no curinga. Em expressões regulares, significa corresponder à subexpressão anterior 0 ou mais vezes
grep 0* /etc/passwd :这里的0*会匹配所有内容(若是有空白行的文件,甚至包括空白行)
grep 00* /etc/passwd :这里的00* 匹配至少包含一个 0 的行(第一个 0 必须出现,第二个0可以出现0次或者多次)
Expressão regular estendida
- Expressão regular estendida é para expandir e aprofundar a expressão regular básica
- Metacaracteres comuns
Metacaractere | efeito |
---|---|
+ | Repete um ou mais do caractere anterior |
? | 0 ou um caractere antes |
Símbolo de tubo | Use ou (ou) para encontrar vários caracteres |
() | Encontre o personagem do "grupo" |
() + | Identifique vários grupos duplicados |
Pegue a ferramenta egrep, o arquivo / etc / passwd como exemplo e dê alguns exemplos:
egrep 0+ /etc/passwd :匹配至少一个 0 的行
egrep '(root|ntp)' /etc/passwd :匹配包含 root 或 ntp 的行
egrep ro?t /etc/passwd :匹配 rt 或者 rot 的行
egrep -v '^$|^#' /etc/passed :过滤文件中的空白行与 # 开头的行,没有空白行与 # 号开头的行,所以没有任何输出