Usando sed para substituir números com @ inserts @ entre todos os caracteres

3

Eu quero substituir todo o número pelo símbolo '@'. Eu estou usando o comando abaixo sed, mas não obtendo o resultado desejado.

comando -

echo "abc 434 pankaj 444" | sed 's/[0-9]*/@/g'

Resultado -

@a@b@c@ @ @p@a@n@k@a@j@ @
    
por Pankaj Pandey 03.12.2017 / 17:24

2 respostas

6

Bem, simplesmente, [0-9]* corresponde cadeias que consistem inteiramente de zero ou mais dígitos, incluindo strings vazias. Qualquer coisa que corresponda a uma string vazia, coincide com quaisquer dois caracteres, de modo que a substituição @ seja adicionada entre todas as letras na entrada. Strings de vários dígitos são substituídas por um @ , pois a expressão corresponde a todos os dígitos consecutivos de uma vez.

Portanto, na string de entrada ab43 , as correspondências para [0-9]+ são (com alguns espaços em branco adicionados para maior clareza):

    a   b   434
  ^   ^     ^^^- here, a string of some digits
  ^   ^- here, a zero-length string
  ^- here, a zero-length string

Use [0-9] para corresponder exatamente a um dígito ou [0-9][0-9]* para corresponder a um ou mais (ou [0-9]+ em expressões regulares estendidas).

    
por 03.12.2017 / 17:34
-1

Você pode conseguir isso também pelo comando awk

echo "abc 434 pankaj 444" |awk '{gsub("[0-9]","@",$0);print $0}'
por 03.12.2017 / 18:15

Tags