我有一个 xml 标签,例如<bestAddressLine4></bestAddressLine4>
.我想将其转换为<bestAddressLine4 />
我正在使用下面的命令,但它不起作用。
sed -i 's/<bestAddressLine4><\/bestAddressLine4>/<bestAddressLine4\/>/g' file.txt
但它不起作用。
请建议我正确的命令。
感谢您的帮助。
答案1
我怀疑@bxm 走在正确的轨道上。
该sed
命令,前提是您的实现支持非标准-i
扩展应该在根据用户的区域设置字符编码进行编码的输入上按预期工作(请参阅 的输出locale charmap
)。
由于这些字符均来自可移植字符集,因此只要该行的其余部分也仅包含来自可移植字符集的字符,它甚至可以在系统上的任何区域设置中工作。
但一种可能性是该文件使用 BOM、UTF-16LE、UTF-16BE、UTF-32 / UCS-4... 进行 UTF-16 编码,这些编码与 POSIX API 不兼容(并且不能是任何语言环境使用的字符映射),因为它们有许多编码包含字节 0 的字符。
要处理这些,您需要使用可以解码该格式文本的工具或语言,或者将其转换为系统支持的中间编码(通常是 UTF-8,这是 Unix 上最常见的 Unicode 编码)像系统)。
file file.txt
应该告诉你它是用什么编码编写的。
如果是 UTF-16(最有可能),您可以执行以下操作:
< file.txt iconv -f UTF-16 |
sed 's|<bestAddressLine4></bestAddressLine4>|<bestAddressLine4/>|g' |
iconv -t UTF-16 > new-file.txt
或者你可以使用perl
(它的-i
一些实现sed
已借用):
perl -Mopen='encoding(UTF-16)' -i -pe '
s{<bestAddressLine4></bestAddressLine4>}{<bestAddressLine4/>}g' file.txt