我正在尝试从文件中删除单引号和双引号。我可以在单个 sed 命令中执行此操作吗?
我在尝试 :
sed 's/\"//g;s/\'//g' txt file
但得到这个错误
`' ' 是不匹配的。
请帮忙。
另一种可能性是使用tr
:
tr -d \'\" file
您无法在 shell 中的一对单引号内转义单引号。但是允许转义双引号。以下 sed 命令应该可以工作:
sed "s/['\"]//g" file
Try this one instead :
sed -e 's|["'\'']||g' txt
要删除单引号,只需在 regex 中使用双引号sed
:
sed -e "s/'//g" ./new_file.csv
您可以使用以下命令
sed "s/'/ /g" file.txt > newfile.txt
sed 's/\"//g' newfile.txt > Required_file.txt
Required_file.txt
是最终的输出。
Centos 7
我通过删除周围的引号来解决它(in ),例如:
sed -i s/\'//g file;sed -i s/\"//g file
好吧,这就是我的目标。
首先,我用 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$