Os principais problemas aqui são o uso das notações abreviadas \w
e \s
. Se o editor é a implementação tradicional de vi
(fontes originais de Bill Joy), então também é possível definir a opção magic
que é configurada por padrão na maioria das implementações modernas de vi
. Isso é feito com :set magic
.
vi
não entende \w
e \s
e notação abreviada similar para várias classes de caracteres como vim
faz.
Para fazer sua substituição em vi
, use
:%s/^\(group[ ][ ]*\)[0-9A-Za-z_]/Test/
De acordo com a documentação vim
, \w
corresponde a [0-9A-Za-z_]
e \s
é um espaço ou uma tabulação (há um espaço e uma tabulação em [ ]
acima).
O padrão E+
, em que E
é alguma expressão, pode ser substituído por EE*
.
O na parte de substituição da substituição deve estar funcionando em
vi
(qualquer vi
). Se isso não acontecer, tente nvi
("new vi
") ou veja se você consegue instalar vim
.
O original vi
(empacotado como traditional-vi
em pelo menos alguns sistemas BSD) precisa ter seus "caracteres especiais" (exceto ^
e $
) escapados, como \*
e \.
etc Como alternativa, você pode definir a opção magic
com :set magic
(normalmente, esse é o padrão nas implementações vi
modernas).
A substituição acima substituiria todas as ocorrências de (por exemplo)
group 1
com
group Test
Outra maneira de fazer a mesma coisa que você tentou:
:g/^group/s/[0-9A-Za-z_]$/Test/
ou apenas
:g/^group/s/.$/Test/
se você não precisa ser muito cuidadoso com o último personagem na linha.
Se você quisesse substituir a última palavra (não apenas o último caractere) na linha:
:g/^group/s/[^ ]*$/Test/
No tradicional vi
sem a opção magic
definida, isso pode ter que ser escrito
:g/^group/s/\[^ ]\*$/Test/