Respostas:
Você pode substituir a barra invertida por um espaço, como mostra o resultado do exemplo:
sed 's/\\/ /g'
ou você pode removê-lo como mostra no seu código:
sed 's/\\//g'
Existem possíveis problemas com o escape da barra invertida para cancelar seu significado especial. Barra invertida é um caractere especial usado para escapar em um shell e em expressões regulares.
O comando digitado na linha de comando ou no script do shell é processado pela primeira vez pelo shell, que interpreta o significado especial dos caracteres e seu escape. O resultado é passado para o comando a ser executado (como sed
), que executa sua própria interpretação dos caracteres. Quando você está construindo um comando, o procedimento mental é o oposto: primeiro adicione o escape para o regex e, em seguida, adicione o escape para o shell.
Em um regex (entrada para comandos como sed
, grep
etc.) barra invertida pode ser precedido de barra invertida assim: \\
e você também pode usar a expressão de conjunto [\]
, como costumava, porque não barra invertida perde o seu significado especial.
Em um shell (como bash
), você pode escapar de barra invertida por barra invertida. Então, ao invés de \
escrever \\
. A inclusão da cadeia entre aspas duplas "
torna o comportamento da barra invertida mais complicado <1>, mas a barra invertida dupla ainda produzirá uma única barra invertida. A inclusão da cadeia entre aspas simples '
faz com que todos os caracteres sejam tratados literalmente, exceto '
.
Se você quiser usar aspas duplas , você pode usar uma das seguintes opções:
sed "s/\\\\//g"
- Escape \
por \
no shell, e escapar cada \
na regex novamente. De fato, as aspas duplas não são necessárias neste caso, porque todo caractere especial é escapado adequadamente.
sed "s/[\\]//g"
- Escape no shell por uma barra invertida \
e no regex use um conjunto [
]
.
sed "s/[\]//g"
- Sim, seu exemplo deve funcionar em um ambiente compatível com POSIX! Entre aspas duplas \
representa a si próprio, a menos que preceda um caractere especial no contexto de aspas duplas: $`"\
ou uma nova linha. Parece que, no seu caso, o shell ou o sed
não seguem o padrão POSIX.
Com aspas simples, você também pode usar a string como você usou ou uma maneira mais curta:
sed 's/[\]//g'
sed 's/\\//g'
No awk, eu faria assim,
$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455
sed 's/\\//'
Coloque um \
antes \
como você faz com a maioria dos caracteres especiais.
g
bandeira por motivo desconhecido. Isso altera o comportamento do comando, mas essa alteração não foi solicitada na pergunta. Caso contrário, sua resposta não trará nada de novo em comparação com as respostas anteriores.
sed
(ou possivelmente está executando esse comando a partir de um shell não-POSIX?). Você não precisased
, porém,tr
é suficiente:tr -d '\\' < P
.