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