我的脚本中出现以下错误。您能帮忙找出问题所在吗?
sed "s/$(printf "\302")/ /g" file1 > file1_new
sed: -e expression #1, char 4: unterminated `s' command
但这一个工作正常,没有问题:
sed "s/$(printf "\240")/ /g" file1 > file1_new
cat file1_new > file1
rm file1_new
第一个有什么问题吗?
答案1
看来sed
二进制替换的效果不太好。我刚刚测试了你正在做的事情tr
,它似乎有效。实际上,只需一个命令即可轻松完成:
cat /path/to/file1 | tr "$(printf "\302\240")" " " > /path/to/file1_new
tr
是一种工具,用于将第一个参数中的字符集“翻译”为第二个参数中的字符集(如果需要,可扩展以匹配第一个参数集的长度)。因此,我们只需将每个字符转换为一个空格,就像您一直在尝试做的那样sed
。
答案2
请注意,您可以直接访问八进制/十六进制数字sed
:
sed -e 's/\o302/ /g' #in octal
sed -e 's/\xC2/ /g' #in hex