sed同时删除单引号和双引号

时间:2013-08-16 10:37:22

标签: sed

我正在尝试从文件中删除单引号和双引号。我可以在一个sed命令中执行此操作吗?

我在尝试:

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

但是会收到此错误

  

`''是无与伦比的。

请帮忙。

7 个答案:

答案 0 :(得分:14)

另一种可能性是使用tr

tr -d \'\" file

答案 1 :(得分:6)

试试这个:

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

答案 2 :(得分:5)

你无法在shell中的一对单引号内转义单引号。但是允许转义双引号。以下sed命令应该起作用:

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

答案 3 :(得分:2)

您可以使用以下命令

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

Required_file.txt是最终输出。

答案 4 :(得分:2)

要删除单引号,只需对sed中的正则表达式使用双引号:

sed -e "s/'//g" ./new_file.csv

答案 5 :(得分: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$

编辑(请注意,这次,两个字符都被替换为相同的字符串“yy”)。可能有一些shell实用程序用于将字符“转换”为字符代码并且相反,即应该可以在不使用的情况下执行此操作perl或其他语言翻译。

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

这是shell的另一种方式,也许更简单

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

答案 6 :(得分:0)

我通过删除周围的引号来解决它(在Centos 7中),如:

sed -i s/\'//g file;sed -i s/\"//g file