Tenho dificuldade em entender /.*/
de acordo com coisas escritas em livros, isso imprime toda a linha do texto. sabemos que .
significa qualquer caractere e *
significa zero ou mais ocorrências do caractere anterior. então espero que /.*/ encontre algo como rrr
qqqq
abbbbb
, quero dizer, repetição contínua de um único caractere.
mas não é isso que ele faz. porque?
minha segunda pergunta é : por /.+/
que não faz a mesma coisa?? no texto que estou tentando o resultado é?
Não, o
*
in.*
significa "qualquer número da expressão anterior ", ou seja, zero ou mais de qualquer tipo de caractere que corresponda à expressão.
.Isso significa que
.*
corresponderáaaaa
,abcd
pois todos os caracteres emabcd
matches.
. Ele também corresponderá a uma linha vazia, pois permite zero correspondências.Se você quiser encontrar uma linha que contenha um caractere repetido , use
Essa expressão corresponde a "qualquer caractere, depois o mesmo caractere e, em seguida, qualquer número de mais do mesmo caractere". O
\1*
pode ser removido, a menos que você esteja procurando por linhas que contenham apenas um caractere repetido; nesse caso, você deve ancorar a expressão no início e no final da linha, como emO
ed
editor suporta expressões regulares básicas . O+
modificador é um modificador de expressão regular estendido . O?
que você obtémed
ao usar/.+/
seria seguido porno match
(ouNo match
no GNUed
) se você tivesse habilitado as explicações de erro com oH
comando. Isso ocorre porque ele tenta encontrar uma linha com a+
, precedida por algum outro caractere.A
.+
expressão regular estendida ("combinar com um ou mais caracteres de qualquer caractere") é equivalente à expressão regular básica..*
, ou seja, "combinar com um caractere e depois com zero ou mais de qualquer caractere".De acordo com seu manual , GNU
ed
deve suportar\+
expressões regulares, então isso..*
é equivalente a.\+
, mas GNUed
1.14.2 no meu sistema OpenBSD não faz isso.