我有一个 Unix shell 脚本,它执行以下操作:
- 创建文件的备份
- 将一些文本附加到文件
现在在#2 中,如果我插入一个文本,^M 会附加到文件的所有行上。
例如:
echo " a" >> /cust/vivek.txt
echo " b" >> /cust/vivek.txt
vi vivek.txt
abc^M
bcd^M
a^M
b^M
有什么办法可以避免这种情况?
我不确定如何echo
生成^M
字符,但您可以通过在文件上运行来删除它们dos2unix
,如下所示:
dos2unix /cust/vivek.txt
^M
是回车,通常在从 Windows 复制文件时看到。采用:
od -xc filename
这应该给出你的文件是什么样子的一个低级列表。如果您的文件不是来自 Windows,那么另一种可能性是您的终端设置没有正确翻译。检查 TERM 环境变量是否正确。
如果文件来自 Windows,则使用dos2unix
或sed 's/\r//' file > file.new
仅有的
sed -e "s/\r//g" file
为我工作
我怀疑这可能是您的 vi 设置的产物,而不是串联。
做什么
cat -v -e filename
显示 ?此命令将转储您的文件并标记控制字符,以便清楚文件中的真正内容。另请参阅此超级用户问题/答案集。
^M 是在 Windows 中使用文件时进入文件的元字符。
dos2unix 命令可以解决这个问题。
dos2unix <filename>
如果您使用的是 windows,您可以使用 notepad++ 并在将文件加载到服务器之前尝试编辑 > EOL 转换 > Unix/OSX 格式。