grupos de captura
Seu primeiro exemplo foi próximo, mas você está dizendo sed
que você quer levar 2 caracteres de cada vez com o \(.\)\(.\)
bit, para fazer isso usando um grupo de captura você pode ajustá-lo assim:
$ echo ahebhaaa | sed 's/\(.\)/\n/g'
a
h
e
b
h
a
a
a
usando &
Por que o exemplo sed
com o &
funciona. O &
em uma pesquisa e substituição é o mesmo que os caracteres que a expressão regular corresponde. Então, tudo que foi não a \n
.
Exemplos
$ echo "123 abc" | sed 's/[0-9]*/&&/'
123123 abc
O primeiro &
imprime os caracteres que foram correspondidos pelo padrão ( [0-9]*
), 123
. O segundo &
imprime uma segunda vez.
$ echo "123 abc" | sed 's/ab/&&&/'
123 abababc
O padrão que procuramos é ab
. À medida que percorremos a string 123 abc
sed está imprimindo os caracteres não correspondentes, 123
. Em seguida, a string ab
é encontrada, o que coincide com o que estamos procurando e substituindo. Então sed
substitui com 3 cópias do que corresponde ( abbab
). Finalmente sed
imprime o c
.
A notação [^\n]
cria um conjunto de não um caractere de fim de linha. Então, pense em sed
enquanto ele percorre sua sequência de texto, ahebhaaa
, está testando cada um desses caracteres e dizendo "Isso não é um \n
"? Se não for um caractere de fim de linha, sed
faz uma pesquisa e substitui esse caractere e o &
imprime o que foi correspondido, ou seja, o caractere, junto com um novo caractere de linha. Em seguida, ele repete isso enquanto percorre a string ahebhaaa
.