【问题标题】:Lines ending with ^M in my config files on Ubuntu?在 Ubuntu 上的配置文件中以 ^M 结尾的行?
【发布时间】:2014-08-03 21:06:03
【问题描述】:

在我的 bash 脚本中,我试图更改我的配置文件之一的配置行。 这是我使用的 bash 脚本。

#!/bin/bash

jdbcURL(){
ssh ppuser@10.101.5.84 "sed -i \"s|\(\"jdbc.url\" *= *\).*|\1$2|\" $1"
}

jdbcURL $4 $5

运行此脚本后,配置文件发生了变化,但问题是,配置文件中的每一行都以 ^M 结尾,所以我的 bash 脚本有什么问题吗?希望有人帮助我。谢谢。

【问题讨论】:

    标签: bash ubuntu sed bin


    【解决方案1】:

    您遇到了 Unixoid 和 Windoid 世界之间的不同行终止问题。在 Unix 和 consorts 使用单个 0x0a(换行)字符的地方,微软的世界更喜欢 0x0d 0x0a(回车,换行)。因此,如果有一个文件的行以回车符和换行符结尾,用 unixoids 查看,它会将换行符解释为行终止符,并将回车符作为行的一部分,这就是您所看到的 ^M

    存在用于在这些不同约定之间转换行终止符的转换实用程序,但您应该能够让您的 sed 表达式处理它。

    作为旁注,Apple 曾经使用另一种行尾表示,即单个回车符。我不知道他们是否仍然这样做。

    【讨论】:

    • @Busmills Apple 现在使用 Unix 操作系统,因此使用 lf
    【解决方案2】:

    ^M 字符是回车符 - Windows 附加到换行符的额外字符。它通常呈现为\r^M 是另一种可视化表示。

    您可以使用dos2unix 实用程序剥离它们:

    $ dos2unix myfile
    

    作为参考,*nix 操作系统(包括 OSX)使用\n 来分隔行; Windows 使用\r\n。 Mac 操作系统,高达 OS-9 单独使用 \r

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      相关资源
      最近更新 更多