我有一个文件需要转换为 unix 格式,所以我正在执行dos2unix filename.txt
。但是与 macOS 格式相比,转换后的文件格式在 CentOS 上有所不同。
我曾尝试更新dos2unix
centos 上的版本,但没有帮助。
CentOS:
dos2unix -V
dos2unix 3.1 (Thu Nov 19 1998)
苹果系统:
dos2unix -V
dos2unix 7.4.0 (2017-10-10)
With Unicode UTF-16 support.
Without native language support.
原始文件格式:
<?xml version="1.0" encoding="utf-8"?>
<ACES version="3.0">
<Header>
<Company>Disc Brakes Australia</Company>
<SenderName>SEMA Data Co-op</SenderName>
<SenderPhone>888-958-6698 option 2</SenderPhone>
<TransferDate>2019-03-21</TransferDate>
<BrandAAIAID>DMWK</BrandAAIAID>
<DocumentTitle>SDC ACES XML File</DocumentTitle>
<EffectiveDate>2019-03-21</EffectiveDate>
<SubmissionType>FULL</SubmissionType>
<VcdbVersionDate>2019-02-22</VcdbVersionDate>
<QdbVersionDate>2019-02-22</QdbVersionDate>
<PcdbVersionDate>2019-02-22</PcdbVersionDate>
</Header>
<App action="A" id="1">
<BaseVehicle id="119723" />
<SubModel id="973" />
<EngineBase id="6067" />
<Region id="3" />
<Qty>2</Qty>
<PartType id="1896" />
<MfrLabel>T3 5000 Series T-Slot Slotted Rotor, Black Hat Test label 1</MfrLabel>
<Position id="22" />
<Part>DBA52120BLKS</Part>
</App>
<App action="A" id="2">
<BaseVehicle id="119723" />
<SubModel id="973" />
<EngineBase id="3930" />
<Region id="1" />
<Qty>2</Qty>
<PartType id="1896" />
<MfrLabel>T3 5000 Series T-Slot Slotted Rotor, Black Hat Test label 2</MfrLabel>
<Position id="22" />
<Part>DBA52120BLKS</Part>
</App>
<Footer>
<RecordCount>2</RecordCount>
</Footer>
</ACES>
m-c02xd0nmjgh7:test files s0c03h1$ od -bc FileName.XML | head -10
0000000 357 273 277 074 077 170 155 154 040 166 145 162 163 151 157 156
357 273 277 < ? x m l v e r s i o n
0000020 075 042 061 056 060 042 040 145 156 143 157 144 151 156 147 075
= " 1 . 0 " e n c o d i n g =
0000040 042 165 164 146 055 070 042 077 076 015 012 074 101 103 105 123
" u t f - 8 " ? > \r \n < A C E S
0000060 040 166 145 162 163 151 157 156 075 042 063 056 060 042 076 015
v e r s i o n = " 3 . 0 " > \r
0000100 012 040 040 074 110 145 141 144 145 162 076 015 012 040 040 040
\n < H e a d e r > \r \n
转换后的Macos文件格式:
m-c02xd0nmjgh7:test files s0c03h1$ dos2unix FileName.XML
dos2unix: converting file FileName.XML to Unix format...
m-c02xd0nmjgh7:test files s0c03h1$ od -bc FileName.XML | head -10
0000000 074 077 170 155 154 040 166 145 162 163 151 157 156 075 042 061
< ? x m l v e r s i o n = " 1
0000020 056 060 042 040 145 156 143 157 144 151 156 147 075 042 165 164
. 0 " e n c o d i n g = " u t
0000040 146 055 070 042 077 076 012 074 101 103 105 123 040 166 145 162
f - 8 " ? > \n < A C E S v e r
0000060 163 151 157 156 075 042 063 056 060 042 076 012 040 040 074 110
s i o n = " 3 . 0 " > \n < H
0000100 145 141 144 145 162 076 012 040 040 040 040 074 103 157 155 160
e a d e r > \n < C o m p
转换后的Centos文件格式:
-bash-4.1$ dos2unix output.txt
dos2unix: converting file output.txt to UNIX format ...
-bash-4.1$ od -bc output.txt | head -10
0000000 357 273 277 074 077 170 155 154 040 166 145 162 163 151 157 156
357 273 277 < ? x m l v e r s i o n
0000020 075 042 061 056 060 042 040 145 156 143 157 144 151 156 147 075
= " 1 . 0 " e n c o d i n g =
0000040 042 165 164 146 055 070 042 077 076 012 074 101 103 105 123 040
" u t f - 8 " ? > \n < A C E S
0000060 166 145 162 163 151 157 156 075 042 063 056 060 042 076 012 040
v e r s i o n = " 3 . 0 " > \n
0000100 040 074 110 145 141 144 145 162 076 012 040 040 040 040 074 103
< H e a d e r > \n < C
我想要获得unix2dos
与上面显示的 Mac 相同的结果。
答案1
357 273 277
是八进制表示UTF-8 中的 BOM(字节顺序标记)。原始文件带有 BOM。在您的某个系统中将dos2unix
其删除。
在我的 Debian 中man 1 dos2unix
说:
-b
,--keep-bom
保留字节顺序标记 (BOM)。当输入文件有 BOM 时,在输出文件中写入 BOM。[…][…]
-r
,--remove-bom
删除字节顺序标记 (BOM)。不要在输出文件中写入 BOM。[…]
如果您有相同(或类似)的可用选项,请使用它们。例如:
dos2unix -r FileName.XML
但是你dos2unix
使用的 CentOS 已经非常老旧了(1998-11-19?超过 20 年了!考虑到第一个 CentOS 版本是在 2004 年发布的,这就更加尴尬了)。变更日志说-r
并-b
于 2014-07-07 添加。获取更新的dos2unix
。
或者寻找bomstrip
。我的 Debian 中的软件包描述bomstrip
是:
Bomstrip 是一款非常简单的工具,可从 UTF-8 文件中删除 BOM(字节顺序标记)。UTF-8 没有字节顺序问题,因此完全没有必要使用三个字节(UTF-8-BOM)来表示字节顺序(因为没有什么可说的)。