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/^/ /}"
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.
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/^/ /}"
Usando sed ,
$ echo "ab^cd^ef" | sed 's,\^, ,g'
ab cd ef
Já 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.)
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 , pois sub(/[^]/, " & ", str) ^ também é especial dentro de [...] . A maioria das implementações awk suportam sub(/[\^]/, " & ", str) .
Tags text-processing shell