Unix脚本在每行的末尾追加^ M.

时间:2013-02-22 09:32:36

标签: bash shell unix

我有一个Unix shell脚本,它执行以下操作:

  1. 创建文件备份
  2. 将一些文字附加到文件
  3. 如果我插入文本,现在在#2中,^ M会附加在文件的所有行上。

    例如:

    echo " a" >> /cust/vivek.txt
    echo " b" >> /cust/vivek.txt
    
    vi vivek.txt
    abc^M
    bcd^M
    a^M
    b^M
    

    有什么方法可以避免这种情况吗?

6 个答案:

答案 0 :(得分:13)

我不确定echo如何生成^M个字符,但您可以通过在文件上运行dos2unix来删除它们,如下所示:

dos2unix /cust/vivek.txt

答案 1 :(得分:4)

^M是回车符,通常在从Windows复制文件时看到。使用:

od -xc filename

应该提供文件外观的低级列表。如果您的文件不是来自Windows,则另一种可能是您的终端设置未正确翻译。检查TERM环境变量是否正确。

如果文件来自Windows,请使用dos2unixsed 's/\r//' file > file.new

答案 2 :(得分:2)

我怀疑这可能是你的vi设置的一个神器,而不是连接。

什么是

cat -v -e filename

显示?此命令将转储您的文件并标记控制字符,以便清楚文件中的真正。另请参阅this Superuser question/answer set

答案 3 :(得分:2)

^ M是在Windows中使用时输入文件的元字符。

dos2unix命令可以解决此问题。

dos2unix <filename>

答案 4 :(得分:1)

sed -e "s/\r//g" file

为我工作

答案 5 :(得分:0)

如果使用的是Windows,则可以在将文件加载到服务器之前,使用notepad ++并尝试“编辑”>“ EOL转换”>“ Unix / OSX格式”。