我正在尝试从文件中删除单引号和双引号。我可以在一个sed命令中执行此操作吗?
我在尝试:
sed 's/\"//g;s/\'//g' txt file
但是会收到此错误
`''是无与伦比的。
请帮忙。
答案 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