yo tengo
Entrada:
NISHA =\455
Salida:
NISHA = 455
Quiero eliminar \
de la salida. Traté de usar el comando sed "s/[\]//g" P
pero no funciona y señala un error:
character found after backslash is not meaningful
sed
regular-expression
yisha
fuente
fuente
sed
(¿o posiblemente está ejecutando ese comando desde un shell que no es POSIX?). No es necesariosed
, sin embargo,tr
es suficiente:tr -d '\\' < P
.Respuestas:
Puede reemplazar la barra invertida por un espacio como se muestra en el resultado del ejemplo:
o puede eliminarlo como se muestra en su código:
Caracteres especiales
Hay posibles problemas con el escape de la barra invertida para cancelar su significado especial. La barra diagonal inversa es un carácter especial utilizado para escapar tanto en un shell como en expresiones regulares.
El comando que escribe en la línea de comando del shell o un script es procesado primero por el shell que interpreta el significado especial de los caracteres y su escape. El resultado luego se pasa al comando que se ejecutará (like
sed
) que realiza su propia interpretación de los caracteres. Cuando está construyendo un comando, el procedimiento mental es el opuesto: primero agregue el escape para la expresión regular y luego agregue el escape para el shell.En una expresión regular (entrada a comandos como
sed
,grep
etc.), la barra invertida se puede escapar mediante una barra invertida como esta:\\
y también puede usar la expresión de conjunto[\]
como la usó porque la barra invertida pierde su significado especial.En un shell (como
bash
) puedes escapar de la barra invertida por la barra invertida. Entonces en lugar de\
escribir\\
. El encerrar la cadena entre comillas dobles"
hace que el comportamiento de la barra invertida sea más complicado <1> pero la barra invertida doble aún producirá una barra invertida simple. El encerrar la cadena entre comillas simples'
hace que todos los caracteres sean tratados literalmente, excepto'
.Si desea utilizar comillas dobles , puede utilizar uno de los siguientes:
sed "s/\\\\//g"
- Escapar\
de\
la cáscara, y escapar de todos\
en la expresión regular de nuevo. De hecho, las comillas dobles no son necesarias en este caso porque cada carácter especial se escapa correctamente.sed "s/[\\]//g"
- Escápese en el caparazón mediante una barra diagonal inversa\
y en la expresión regular use un conjunto[
]
.sed "s/[\]//g"
- Sí, ¡su ejemplo debería funcionar en un entorno compatible con POSIX! Entre comillas dobles se\
representa a menos que preceda un carácter especial en el contexto de comillas dobles:$`"\
o una nueva línea. Parece que en su caso el shell o elsed
no sigue el estándar POSIX.Con comillas simples también puede usar la cadena como la usó o de una manera más corta:
sed 's/[\]//g'
sed 's/\\//g'
fuente
Tienes que escapar de la barra invertida. Prueba esto:
fuente
Si no desea soluciones sed, intente con los siguientes comandos:
fuente
En awk, me gustaría hacer esto,
fuente
Coloca un
\
antes\
como lo haces con la mayoría de los personajes especiales.fuente
g
bandera por razones desconocidas. Esto cambia el comportamiento del comando, pero dicho cambio no se solicitó en la pregunta. De lo contrario, su respuesta no trae nada nuevo en comparación con las respuestas anteriores.