Como substituir “^” por espaço?

4

Como pode ^ ser substituído pelo espaço no Unix?

Entrada:

ab^cd^ef

Saída:

ab cd ef

Eu tentei sub(/^/, " & ", str) , mas a saída é igual à entrada.

    
por Kuldeep Singh 29.08.2016 / 05:38

3 respostas

16

Esse é o trabalho para tr :

$ str=ab^cd^ef
$ printf '%s\n' "$str" | tr '^' ' '
ab cd ef

Em bash , ksh93 , mksh , zsh :

printf '%s\n' "${str//^/ }"

Em zsh :

print -rl -- "${str:gs/^/ /}"
    
por 29.08.2016 / 05:48
7

Usando sed ,

$ echo "ab^cd^ef" | sed 's,\^, ,g'
ab cd ef

comentada por @jasonwryan você pode usar a sequência de caracteres embutida substituição,

$ str="ab^cd^ef"
$ echo "${str//^/ }"
ab cd ef

Outro, sugerido por @someonewithpc

$ echo "ab^cd^ef" | sed 'y,^, ,'
ab cd ef

(Nota: y é usado para transformar caracteres.)

    
por 29.08.2016 / 06:15
2

Supondo que você queira fazer a substituição em awk como seu

sub(/^/, " & ", str)

sugere que você precisa escapar do ^ , que é um operador de expressão regular estendida ( /^/ significa correspondência no início da string):

sub(/\^/, " & ", str)

substituiria a primeira ocorrência de ^ em str com ^ (espaço ^ espaço). Use sub(/\^/, " ", str) para substituir por espaço e gsub(/\^/, " ", str) para substituir todas as ocorrências.

Observe que você não pode usar sub(/[^]/, " & ", str) , pois ^ também é especial dentro de [...] . A maioria das implementações awk suportam sub(/[\^]/, " & ", str) .

    
por 29.08.2016 / 16:18