eu tenho
Entrada:
NISHA =\455
Resultado:
NISHA = 455
Eu quero remover \
da saída. Eu tentei usar o comando, sed "s/[\]//g" P
mas ele não está funcionando e sinaliza um erro:
character found after backslash is not meaningful
sed
regular-expression
yisha
fonte
fonte
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
.Respostas:
Você pode substituir a barra invertida por um espaço, como mostra o resultado do exemplo:
ou você pode removê-lo como mostra no seu código:
Caracteres especiais
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 osed
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'
fonte
Você tem que escapar da barra invertida. Tente o seguinte:
fonte
Se você não deseja soluções sed, tente com os seguintes comandos:
fonte
No awk, eu faria assim,
fonte
Coloque um
\
antes\
como você faz com a maioria dos caracteres especiais.fonte
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.