【问题标题】:need dos end of line character in unix file, without Unix end of line appended在 unix 文件中需要 dos 行尾字符,不附加 Unix 行尾
【发布时间】:2014-04-16 02:00:08
【问题描述】:

我需要在Unix上创建一个dos格式的文本文件,其行尾字符为\r\n。

在 Unix 和 vi 中,我可以看到(通过“设置列表”)$ 行尾字符。
当我使用以下方法将文件转换为 DOS 格式时:

perl -i -pne "s/\n/\r\n/g" i.txt  

我得到的行尾是:^M$。
这很接近,但我需要的是一个以 \r\n 结尾的文件(即:仅限 ^M)。

示例 i.txt 文件(例如,如果在 vi 中启用了设置列表):
起始文本第一行$
开始文本第二行$

转换后的产品:
起始文本第一行^M$
开始文本第二行^M$

需要:
起始文本第一行^M
开始文本第二行^M

所以我需要 dos 单字符表示作为行尾。 unix2dos 没有帮助。建议?

【问题讨论】:

  • 真的想要文件中的所有文本在同一行吗?删除换行符会将其放在一行中。
  • 你是想告诉我们在 Google 中输入“dos end of line character in unix”没有得到答案吗?
  • 是的,这就是我要说的 :-) 这就是我找到上面提到的 Perl 小宝石的地方。不,不希望所有文本都在一行中。只是阅读该项目的要求,并想知道这是否可能。我在想“不,也必须有 \n”(即:不能避免在每一行的末尾都有两个 ^M$ )。但是找人告诉我我错了。

标签: unix text format dos


【解决方案1】:

$ 不代表字符。它只是显示了行结束的位置。

这样做的目的是显示尾随空格,就像在这个示例中解释 uniq 输出:

$ uniq file
foo
foo 

$ cat -vE file
foo$
foo $

由于它只是一个视觉标记,询问如何删除它是没有意义的。它从来不在那里。如果你想要\r\n,那么^M$ 是正确的。这是一个可以通过十六进制转储验证的示例:

$ cat -vE file
foo^M$
bar^M$

$ od -c -t x1 < file
0000000   f   o   o  \r  \n   b   a   r  \r  \n
         66  6f  6f  0d  0a  62  61  72  0d  0a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    相关资源
    最近更新 更多