Risposte:
Puoi sostituire la barra rovesciata con uno spazio come mostrato nel risultato dell'esempio:
sed 's/\\/ /g'
oppure puoi rimuoverlo come indicato nel codice:
sed 's/\\//g'
Ci sono possibili problemi con l'escaping di backslash per annullarne il significato speciale. La barra rovesciata è un carattere speciale utilizzato per la fuga sia in una shell che in espressioni regolari.
Il comando digitato sulla riga di comando della shell o su uno script viene prima elaborato dalla shell che interpreta il significato speciale dei caratteri e la loro fuga. Il risultato viene quindi passato al comando da eseguire (come sed
) che esegue la propria interpretazione dei personaggi. Quando stai costruendo un comando, la procedura mentale è l'opposto: prima aggiungi la fuga per la regex, quindi aggiungi la fuga per la shell.
In una regex (input per comandi come sed
, grep
ecc.) La barra rovesciata può essere sfuggita da una barra rovesciata in questo modo: \\
e puoi anche usare l'espressione impostata [\]
come hai usato perché la barra rovesciata perde il suo significato speciale.
In una shell (come bash
) puoi sfuggire alla barra rovesciata. Quindi invece di \
scrivere \\
. Racchiudere la stringa tra virgolette doppie "
rende il comportamento della barra rovesciata più complicato <1>, ma la barra rovesciata doppia produrrà comunque una barra rovesciata singola. Racchiudere la stringa tra virgolette singole '
rende ogni carattere da trattare letteralmente tranne '
.
Se vuoi usare le virgolette doppie , puoi usare una delle seguenti
sed "s/\\\\//g"
opzioni : - Scappa \
dalla \
shell e scappa di nuovo da ogni \
regex. In questo caso, in questo caso, non sono necessarie le doppie virgolette perché ogni carattere speciale è correttamente evaso.
sed "s/[\\]//g"
- Fuga nella shell da una barra rovesciata \
e nella regex usa un set [
]
.
sed "s/[\]//g"
- Sì, il tuo esempio dovrebbe funzionare in un ambiente conforme a POSIX! Tra virgolette doppie si \
rappresenta se non precede un carattere speciale nel contesto di virgolette doppie: $`"\
o una nuova riga. Sembra che nel tuo caso o la shell o il sed
non segua lo standard POSIX.
Con le virgolette singole puoi anche usare la stringa come hai usato o in modo più breve:
sed 's/[\]//g'
sed 's/\\//g'
In awk, farei così,
$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455
sed 's/\\//'
Metti un \
prima \
come fai con i personaggi più speciali.
g
bandiera per motivi sconosciuti. Ciò modifica il comportamento del comando ma tale modifica non è stata richiesta nella domanda. Altrimenti la tua risposta non porta nulla di nuovo rispetto alle risposte precedenti.
sed
(o forse stai eseguendo quel comando da una shell non POSIX?). Non è necessariosed
, però,tr
è sufficiente:tr -d '\\' < P
.