j'ai
Contribution:
NISHA =\455
Production:
NISHA = 455
Je souhaite supprimer \
de la sortie. J'ai essayé d'utiliser la commande sed "s/[\]//g" P
mais cela ne fonctionne pas et cela signale une erreur:
character found after backslash is not meaningful
sed
regular-expression
yisha
la source
la source
sed
(ou peut-être exécutez-vous cette commande à partir d'un shell non-POSIX?). Vous n'avez pas besoinsed
cependant,tr
est assez:tr -d '\\' < P
.Réponses:
Vous pouvez soit remplacer la barre oblique inverse par un espace comme vous le montrez dans l'exemple de résultat:
ou vous pouvez le supprimer comme vous le voyez dans votre code:
Caractères spéciaux
Il peut y avoir des problèmes 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 commande que vous tapez sur la ligne de commande 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 commande à exécuter (comme
sed
) qui effectue sa propre interprétation des caractères. Lorsque vous construisez une commande, la procédure mentale est l'inverse: ajoutez d'abord l'échappement pour l'expression régulière puis ajoutez l'échappement pour le shell.Dans une expression régulière (entrée de commandes telles que
sed
,grep
etc.), la barre oblique inverse peut être échappée par une barre oblique inverse comme ceci:\\
et vous pouvez également utiliser l'expression définie[\]
comme vous l'avez utilisée car la barre oblique inverse perd sa signification particulière.Dans un shell (comme
bash
), vous pouvez échapper à la barre oblique inverse par barre oblique inverse. Donc au lieu d'\
écrire\\
. Mettre la chaîne entre guillemets doubles"
complique le comportement de la barre oblique inverse <1>, mais la double barre oblique inverse produira toujours une barre oblique inverse simple. Mettre la chaîne entre guillemets simples'
fait que chaque caractère doit être traité littéralement sauf'
.Si vous souhaitez utiliser des guillemets doubles , vous pouvez utiliser l'une des options suivantes:
sed "s/\\\\//g"
- Échapez\
par\
dans le shell, et échappez de nouveau à chaque\
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 l'expression régulière utiliser un ensemble[
]
.sed "s/[\]//g"
- Oui, votre exemple devrait fonctionner dans un environnement compatible POSIX! Entre guillemets doubles se\
représente à moins qu'il ne précède un caractère spécial dans le contexte des guillemets doubles:$`"\
ou une nouvelle ligne. Il semble que dans votre cas, le shell ou lesed
ne suit pas la norme POSIX.Avec des guillemets simples, vous pouvez également utiliser la chaîne comme vous l'avez utilisé ou d'une manière plus courte:
sed 's/[\]//g'
sed 's/\\//g'
la source
Vous devez échapper à la barre oblique inverse. Essaye ça:
la source
Si vous ne voulez pas de solutions sed, essayez avec les commandes suivantes:
la source
En awk, je ferais comme ça,
la source
Placez un
\
avant\
comme vous le faites avec la plupart des caractères spéciaux.la source
g
drapeau pour une raison inconnue. Cela modifie le comportement de la commande mais une telle modification n'a pas été demandée dans la question. Sinon, votre réponse n'apporte rien de nouveau par rapport aux réponses précédentes.