16

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

  1. 创建文件的备份
  2. 将一些文本附加到文件

现在在#2 中,如果我插入一个文本,^M 会附加到文件的所有行上。

例如:

echo " a" >> /cust/vivek.txt
echo " b" >> /cust/vivek.txt

vi vivek.txt
abc^M
bcd^M
a^M
b^M

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

4

6 回答 6

18

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

dos2unix /cust/vivek.txt
于 2013-02-22T09:37:42.767 回答
6

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

od -xc filename

这应该给出你的文件是什么样子的一个低级列表。如果您的文件不是来自 Windows,那么另一种可能性是您的终端设置没有正确翻译。检查 TERM 环境变量是否正确。

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

于 2013-02-22T09:41:55.943 回答
4

仅有的

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

为我工作

于 2019-01-15T15:52:46.103 回答
3

我怀疑这可能是您的 vi 设置的产物,而不是串联。

做什么

cat -v -e filename

显示 ?此命令将转储您的文件并标记控制字符,以便清楚文件中的真正内容。另请参阅此超级用户问题/答案集

于 2013-02-22T09:36:39.737 回答
2

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

dos2unix 命令可以解决这个问题。

dos2unix <filename>
于 2013-02-22T10:32:35.343 回答
1

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

于 2020-05-05T14:36:23.067 回答