2013-08-16 129 views
7

我想从文件中删除单引号和双引号。我可以在单个sed命令中执行吗?sed同时删除单引号和双引号

我想:

sed 's/\"//g;s/\'//g' txt file 

,但得到这个错误

'”'是无与伦比的。

请大家帮忙。

回答

5

试试这个来代替:

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

@ user2689092注意Imane的解决方案使用一种技术,用仲裁字符替换sed表达式封装。假设原始输入中没有“%”,您可以使用sed -e的%aaa%bbb%g'来替换bbb中的aaa。 –

0

嗯,这里就是我来。首先,我用ord()发现了单引号和双引号字符的代码,然后使用$(..)语法将它传递给未引用的sed表达式。我用XX和YY代替空字符串。显然,它从最佳状态开始是一种常态,也就是说,它们也许应该合并成一种表达方式,我鼓励你对它进行试验。 有几种技术可以避免引用问题,您还可以将sed表达式放入单独的文件中,以避免它被shell解释。当试图处理输出中的单个不可读字符时,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”代替)。可能有一些shell实用程序的“翻译”字符的字符代码,方向相反,即它应该是可能的不使用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

这是正确的答案,有时候你必须有单引号的文本,那么单引号的方式就是“'''''。 “'它'好极了!'”。 – 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命令是最终输出。