2013-08-16 8 views

risposta

5

provare questo invece:

sed -e 's|["'\'']||g' txt 
+0

@ user2689092 note La soluzione di Imane utilizza una tecnica che sostituisce le enclosure di espressioni sed con il carattere arbitrale. Puoi usare, ad esempio, sed -e 's% aaa% bbb% g', per ottenere aaa sostituito con bbb, assumendo che non ci sia "%" nell'input originale. –

0

Bene, ecco quello che ho venuto a.

In primo luogo, ho scoperto con ord() quali sono i codici per i caratteri virgolette singole e doppie, e quindi ho utilizzato la sintassi $ (..) per passarla in espressione sed non quotata. Ho usato XX e yy invece di stringhe vuote. Ovviamente è da un punto di vista ottimale, cioè dovrebbero forse essere combinati in un'unica espressione, vi incoraggio a sperimentarlo. Esistono diverse tecniche per evitare di citare problemi, puoi anche mettere l'espressione di sed in un file separato, per evitare che venga interpretata dalla shell. Il trucco ord()/chr() è utile anche quando si cerca di gestire singoli caratteri illeggibili nell'output, ad es. Stringhe UTF su console non UTF.

dtpwmbp:~ pwadas$ echo '"' | perl -pe 'print ord($_) . "\n";' 
34 
" 
dtpwmbp:~ pwadas$ echo "'" | perl -pe 'print ord($_) . "\n";' 
39 
' 
dtpwmbp:~ pwadas$ echo \'\" 
'" 
dtpwmbp:~ pwadas$ echo \'\" | sed -e s/$(perl -e 'print chr(34) . "\n"')/XX/g | sed -e s/$(perl -e 'print chr(39) . "\n"')/yy/g 
yyXX 
dtpwmbp:~ pwadas$ 

EDIT (si noti che questa volta, entrambi i personaggi vengono sostituiti con la stessa stringa "yy"). Ci potrebbero essere alcune utilità shell per i caratteri "traduzione" ai codici di carattere e opposto, ossia dovrebbe essere possibile fai questo senza usare perl o un altro interprete di lingua.

dtpwmbp:~ pwadas$ echo \'\" | sed -e s/[`perl -e 'print chr(34) . chr(39)'`]/yy/g 
yyyy 
dtpwmbp:~ pwadas$ 

ed ecco ancora un altro modo in guscio, forse ancora più semplice

dtpwmbp:~ pwadas$ X="'"; Y='"' ; echo $X$Y; echo $X$Y | sed -e "s/$X/aa/g;s/$Y/bb/g" 
'" 
aabb 
dtpwmbp:~ pwadas$ 
3

Non si può sfuggire a una sola offerta all'interno di un paio di citazioni singe in guscio. È comunque possibile sfuggire alle doppie virgolette. A seguito di comando sed dovrebbe funzionare:

sed "s/['\"]//g" file 
+1

Questa è la risposta giusta qui, a volte devi avere un testo a virgolette singole, quindi il modo di mettere una virgoletta in esso è ''\' '' ad es. "E 'alieno!" – jthill

12

Un'altra possibilità sarebbe quella di utilizzare tr:

tr -d \'\" file 
2

È possibile utilizzare i comandi di seguito

sed "s/'/ /g" file.txt > newfile.txt 
sed 's/\"//g' newfile.txt > Required_file.txt 

Required_file.txt è l'uscita finale.