Supprimer les barres obliques inverses d'un file text

j'ai

Consortingbution:

NISHA =\455 

Sortie:

  NISHA = 455 

Je veux supprimer \ de la sortie. J'ai essayé d'utiliser la command sed "s/[\]//g" P mais il ne fonctionne pas et il signale une erreur:

 character found after backslash is not meaningful 

Vous pouvez soit replace la barre oblique inverse par un espace comme indiqué dans le résultat de l'exemple:

 sed 's/\\/ /g' 

ou vous pouvez l'enlever comme vous le montrez dans votre code:

 sed 's/\\//g' 

Caractères spéciaux

Il y a des problèmes possibles avec l'échappement de la barre oblique inverse pour annuler sa signification spéciale. La barre oblique inverse est un caractère spécial utilisé pour s'échapper à la fois dans un shell et dans des expressions régulières.

La command que vous tapez sur la command line du shell ou un script est d'abord traitée par le shell qui interprète la signification particulière des caractères et leur échappement. Le résultat est ensuite passé à la command à exécuter (comme sed ) qui effectue sa propre interprétation des caractères. Lorsque vous construisez une command, la procédure mentale est la méthode inverse: ajoutez d'abord l'échappement pour l'expression régulière, puis ajoutez l'échappement pour le shell.

  1. Dans une regex (input de commands comme sed , grep etc.), la barre oblique inverse peut être remplacée par une barre oblique inverse: \\ et vous pouvez également utiliser l'expression [\] comme vous l'avez utilisé car la barre oblique perd sa signification particulière.

  2. Dans un shell (comme bash ), vous pouvez éviter une barre oblique inverse par barre oblique inverse. Donc au lieu de \ écrire \\ . L'inclusion de la string entre guillemets " rend le comportement d'antislash plus compliqué <1>, mais la double barre oblique inverse produit toujours une barre oblique inverse unique. L'inclusion de la string entre apostrophes rend chaque caractère à traiter littéralement à l'exception de ' .

Si vous souhaitez utiliser des guillemets doubles , vous pouvez utiliser l'un des éléments suivants:
sed "s/\\\\//g"sed "s/\\\\//g" \ par \ dans le shell, et échappe tous les \ dans l'expression régulière. En fait, les guillemets doubles ne sont pas nécessaires dans ce cas car chaque caractère spécial est correctement échappé.
sed "s/[\\]//g" – S'échapper dans le shell par une barre oblique inverse \ et dans la regex utiliser un set [ ] .
sed "s/[\]//g" – Oui, votre exemple devrait fonctionner dans un environnement compatible POSIX! Entre les guillemets doubles \ elle-même, sauf si elle précède un caractère spécial dans le context des guillemets doubles: $`"\ ou une nouvelle ligne Il semble que dans votre cas, le shell ou le sed ne respecte pas la norme POSIX.

Avec des guillemets simples, vous pouvez également utiliser la string comme vous l'avez utilisée ou d'une manière plus courte:
sed 's/[\]//g'
sed 's/\\//g'

Vous devez échapper à la barre oblique inverse. Essaye ça:

 sed 's/\\//g' 

Si vous ne voulez pas de solutions sed, essayez avec les commands suivantes:

 $ echo "NISHA =\455"| awk -F'\' '{print $1 $2}' $ echo "NISHA =\455"| tr '\\' ' ' $ echo "NISHA =\455"| tr -d '\\' $ echo "NISHA =\455"| cut -c 1-7,9-11 
 sed 's/\\//' 

Placez un \ avant \ comme vous le faites avec la plupart des caractères spéciaux.

En awk, je ferais comme ça,

 $ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1' NISHA = 455