2013-08-16 16 views

答えて

5

ではなく、この方法を試してください。

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

@ user2689092 note Imaneのソリューションは、sed式のエンクロージャを仲裁文字に置き換えた技術を使用しています。たとえば、sed -eの%aaa%bbb%g 'を使用して、元の入力に「%」がないと仮定して、aaaをbbbに置き換えることができます。 –

0

をさて、ここで私が来たものです。

まず、ord()で一重引用符と二重引用符のコードを見つけ、$(..)構文を引用符で囲まれていないsed式に渡しました。空の文字列の代わりにXXとyyを使用しました。明らかにそれは最適ではないので、おそらくそれらを1つの表現に組み合わせる必要があります。私はそれを試してみることをおすすめします。 問題を引用しないようにするにはいくつかの方法がありますが、sed式を別のファイルに入れてシェルが解釈しないようにすることもできます。 ord()/ chr()トリックは、出力中の単一の判読不可能な文字を処理しようとするときにも便利です。非UTFコンソール上の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(この時間は、両方の文字が同じ文字列「YY」と置き換えられていることに注意してください)。それができなければならない。すなわち、文字コードとは逆に「翻訳」の文字のためのいくつかのシェルユーティリティがあるかもしれませんperlや他の言語インタープリターを使用せずにこれを行います。

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

、ここではまだシェル内の別の方法だ、おそらく単純

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

あなたはシェルで焦がす引用符のペア内の単一引用符をエスケープすることはできません。しかし二重引用符をエスケープすることは許されています。以下のsedコマンドは動作するはずです:

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

これは正しい答えです。一重引用符で囲む必要がある場合は、一重引用符を入れる方法は ''\' ''です。 ''それはaliiiveです!''。 – jthill

12

別の可能性は、trを使用することです:

tr -d \'\" file 
2

あなたは最終的な出力がある

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

Required_file.txt以下のコマンドを使用することができます。

関連する問題