sed um padrão seguido com qualquer caractere único, uma ou mais vezes

0

Eu quero substituir o padrão "uid=" seguido por qualquer caractere único uma ou mais vezes. Então eu uso este comando:

sed s/uid=.+/uid=something/g file

Mas isso não funciona. Parece que o "seguido com qualquer caractere único um ou mais vezes" não está correto, ou seja, .+

Alguma ideia do porquê?

    
por bam500 05.05.2017 / 16:32

2 respostas

1

Com BSD sed ou versões recentes do GNU e busybox sed , você pode usar

sed -E 's/uid=.+/uid=something/'

para corresponder a um único caractere uma ou mais vezes.

A -E flag para sed ativa expressões regulares estendidas . Sem isso, você obtém expressões regulares básicas . Os dois conjuntos de gramáticas de expressões regulares são basicamente os mesmos, mas usam uma sintaxe ligeiramente diferente, e o conjunto estendido suporta mais operadores.

Isso substituiria

uid=110

com

uid=something

Se você quer combinar o mesmo caractere - não com BSD sed -:

sed -E 's/uid=(.)*/uid=something/'

Isso substituiria

uid=110

com

uid=something0

Os EREs padrão não têm referências anteriores. O GNU sed suporta-o como uma extensão, mas não o BSD sed . Referências anteriores são um recurso de BREs padrão, portanto, você pode fazer:

sed 's/uid=\(.\)*/uid=something/'

portably.

    
por 05.05.2017 / 16:39
1
sed 's/uid=..*/uid=something/g' file

Ou:

sed 's/uid=.\{1,\}/uid=something/g' file

para posix sed

    
por 05.05.2017 / 16:38