Bash 难以用sed替换的字符

Bash 难以用sed替换的字符,bash,encoding,sed,Bash,Encoding,Sed,(下面是因为我无法粘贴我看到的字符,BB将表示一个字符,它是一个数字为0080的正方形,后面是一个内部数字为0094的正方形) 我使用ISO-8859-15编码创建了这个字幕文件,当在文本编辑器中看到它时,它使用的是–BB,而不是– 如果我使用cat读取文件,破折号会正常显示,但如果我按原样使用文件,则会在视频字幕上显示一个–€“ 我尝试用sed替换,但没有成功: sed 's/âBB/–/g' thisfile > correctedfile sed 's/—/–/g' thisfi

(下面是因为我无法粘贴我看到的字符,
BB
将表示一个字符,它是一个数字为0080的正方形,后面是一个内部数字为0094的正方形)

我使用ISO-8859-15编码创建了这个字幕文件,当在文本编辑器中看到它时,它使用的是
–BB
,而不是

如果我使用
cat
读取文件,破折号会正常显示,但如果我按原样使用文件,则会在视频字幕上显示一个
–€“

我尝试用sed替换,但没有成功:

sed 's/âBB/–/g' thisfile > correctedfile
sed 's/—/–/g' thisfile > correctedfile
我首先在命令行中尝试了它,但编号的框没有出现,然后我用脚本进行了尝试

我甚至试着和你一起作弊

sed 's/â../–/g' thisfile > correctedfile
但它不起作用


cat
sed
将它完美地看作一个–,所以我尝试了

sed 's/–/–/g' thisfile > correctedfile
但它也不起作用

然后我尝试了
重新编码iso885915..utf8这个文件,反之亦然,但什么都没有

如果我在
kate
中定期查找并替换,它会修复它。但是由于这个问题存在于其他文件中,我想用
for;做已在命令行中完成
循环,但为此,我需要知道如何修复其中一个


为什么这些解决方案不起作用,我缺少什么,以及如何使其起作用?

我认为您正在寻找的sed命令是:

sed 's/\xE2\x80\x94/-/g' thisfile
\xE2\x80\x94是十六进制,我假设是有问题的字符序列。(仅供参考,这是字符2014的UTF-8代码,某种长破折号)。这比尝试将特殊字符直接抛出到sed命令中更可取

如果这不起作用,请使用hextump确切地找出有问题的字节

hexdump -C thisfile

尝试查看sed看到的文件。使用'sed-nl file',然后在替换命令中使用这些值。
cat
sed
将其完美地看作一个–,然后我尝试了
sed's/–/–/g'
,但它也不起作用。我不使用sed,但这是怎么回事:?很好,Miroslav,值得一试。现在我提到的正方形字符的八进制等价物是什么,我相信这些数字是十六进制的。如果有疑问,请查看十六进制!sed和cat不会将字符视为任何东西。您的终端是将字节序列作为破折号进行交互的终端。要查看文件中真正的内容,请执行hextump-Csed
,但它不起作用。hextump显示为'?200 224',但当我在一个创建的文本文件中进行测试时,我在其中键入了这样的破折号,它在hextump中的显示是相同的。相同的hextump,但只有ISO-8859-15中的文件在以kate或subs显示时出现问题。hextump-C不会给您打问号。它也不会给你八进制值。您是否使用小写c而不是大写?还有,你说它不起作用是什么意思?它根本没有修改文件,或者它确实修改了文件,但文件仍然不会显示,对吗?Sed可以将任何字节替换为任何其他字节,而不考虑编码。我理解它对你不起作用,但我不确定你说它不起作用是什么意思。我测试过。根本没有更改文件,这意味着它与文件不匹配。