2013-08-16 9 views

Odpowiedz

5

Spróbuj jednego Zamiast:

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

@ user2689092 uwaga Rozwiązanie Imane wykorzystuje technikę zastępującą obudowy wyrażeń sed z charakterem arbitrażowym. Możesz użyć na przykład sed -e% aaa% bbb% g ', aby zastąpić go bbb, zakładając, że nie ma "%" w oryginalnym wprowadzeniu. –

0

Cóż, tutaj jest to, co ja przyszedł.

Najpierw dowiedziałem się z ord(), jakie są kody znaków pojedynczych i podwójnych, a następnie użyto składni $ (..), aby przekazać ją do niecytowanego wyrażenia sed. Użyłem XX i yy zamiast pustych łańcuchów. Oczywiście jest to faaar z optymalnego, tj. Być może powinny być połączone w jeden wyraz, zachęcam do eksperymentowania z nim. Istnieje kilka technik, aby uniknąć problemów z cytowaniem, możesz również umieścić wyrażenie sed w oddzielnym pliku, aby uniknąć interpretacji przez powłokę. Podpowiedź ord()/chr() jest również przydatna, gdy próbujesz uporać się z pojedynczymi nieczytelnymi znakami na wyjściu, np. Ciągi UTF na konsoli innej niż 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 (zauważ, że tym razem, oba znaki są zastępowane przez tego samego łańcucha „yy”). Nie może być niektóre narzędzia powłoki dla znaków „tłumaczenia” do kodów znaków i odwrotnie, to znaczy powinno być możliwe rób to bez użycia perla lub innego interpretera języka.

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

a oto jeszcze inny sposób w skorupkach, może nawet prostszy

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

Nie można uciec pojedynczy cytat wewnątrz parę cytatów małpa w powłoce. Dozwolone jest jednak wydawanie podwójnych cudzysłowów. Następujące polecenie sed powinno działać:

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

To jest odpowiednia odpowiedź tutaj, czasami musisz mieć tekst w jednym cudzysłowie, wtedy sposobem na umieszczenie w nim pojedynczego cudzysłowu jest ''\' '' np. ''It' \ 's aliiive!''. – jthill

12

Inną możliwością byłoby wykorzystanie tr:

tr -d \'\" file 
2

Można użyć polecenia poniżej

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

Required_file.txt jest końcowym rezultatem.

Powiązane problemy