14

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

我在尝试 :

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

但得到这个错误

`' ' 是不匹配的。

请帮忙。

4

7 回答 7

22

另一种可能性是使用tr

tr -d \'\" file
于 2013-08-16T15:40:46.823 回答
12

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

sed "s/['\"]//g" file
于 2013-08-16T13:26:34.613 回答
6

Try this one instead :

sed -e 's|["'\'']||g' txt
于 2013-08-16T10:46:21.223 回答
5

要删除单引号,只需在 regex 中使用双引号sed

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

于 2018-11-02T14:12:25.890 回答
2

您可以使用以下命令

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

Required_file.txt是最终的输出。

于 2016-11-22T11:09:30.757 回答
1

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

sed -i s/\'//g file;sed -i s/\"//g file 
于 2018-04-04T12:37:40.590 回答
0

好吧,这就是我的目标。

首先,我用 ord() 找出了单引号和双引号字符的代码,然后使用 $(..) 语法将其传递给不带引号的 sed 表达式。我使用 XX 和 yy 而不是空字符串。显然它是最优的 faaar,即它们也许应该组合成一个表达式,我鼓励你尝试一下。有几种技术可以避免引用问题,您也可以将 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$ 
于 2013-08-16T10:55:03.300 回答