问题:
有的时候, 我们把一个在windows上修改过的文件拿到linux上用vim打开之后,每行末尾会出现多余的字符 “^M”,这是怎么回事呢?
1.CR/LF介绍
CR和LF是在计算机终端还是电传打印机的时候遗留下来的东西。电传打字机就像普通打字机一样工作。
在每一行的末端,CR命令让打印头回到左边。LF命令让纸前进一行。
虽然使用卷纸的终端时代已经过去了,但是,CR和LF命令依然存在,许多应用程序和网络协议仍使用这些命令作为分隔符。
Linux(unix) 和 mac 默认使用 “\n” 作为换行符;
2.Unix(Linux)的换行符
“\n” 在 ACSII表中 对应 LF , ACSII值为 10 ,即0x0a (16进制)
3.windows下换行符
“\r” 在ACSII表中对应 “CR”, ACSII值为 13 ,即0x0d (16进制) 。
4. unix/windows格式换行符转换
4.1 在linux上可以使用以下工具进行转换
4.2 在windows上CRLF和LF的转换
4.2.1 使用dos2unix/unix2dos 转换
下载windows版本的 dos2unix/unix2dos,
dos2unix – Browse /dos2unix/7.5.1 at SourceForge.net
dos2unix-7.5.1-win64-nls/share/doc/dos2unix-7.5.1/dos2unix.htm
example 和 RECURSIVE CONVERSION 章节
4.2.2 在windows上常用的代码编辑器一般都支持CRLF和LF的转换
比如说 VsCode, 在右下角可以选择 LF 或者CRLF;
5. git中关于换行符的一些配置
5.1 core.autocrlf
5.2 core.eol
5.3 core.safecrlf
core.safecrlf 选项用于防止混合换行符的错误。它有三个可选值:
5.4 git配置建议
# 查看 git config 配置
git config -l
# 查看 git config 配置具体位置
git config --list --show-origin
# 全局配置
git config --global core.autocrlf true
建议配置 : core.autocrlf = false (保持默认配置)
针对在linux环境提交的bat脚本,手动转换为 CRLF格式。
附录1. ASCII 码表
附录2 . dos2unix 使用方法介绍
EXAMPLES
Read input from 'stdin' and write output to 'stdout':
dos2unix < a.txt
cat a.txt | dos2unix
Convert and replace a.txt. Convert and replace b.txt:
dos2unix a.txt b.txt
dos2unix -o a.txt b.txt
Convert and replace a.txt in ascii conversion mode:
dos2unix a.txt
Convert and replace a.txt in ascii conversion mode, convert and replace
b.txt in 7bit conversion mode:
dos2unix a.txt -c 7bit b.txt
dos2unix -c ascii a.txt -c 7bit b.txt
dos2unix -ascii a.txt -7 b.txt
Convert a.txt from Mac to Unix format:
dos2unix -c mac a.txt
mac2unix a.txt
Convert a.txt from Unix to Mac format:
unix2dos -c mac a.txt
unix2mac a.txt
Convert and replace a.txt while keeping original date stamp:
dos2unix -k a.txt
dos2unix -k -o a.txt
Convert a.txt and write to e.txt:
dos2unix -n a.txt e.txt
Convert a.txt and write to e.txt, keep date stamp of e.txt same as
a.txt:
dos2unix -k -n a.txt e.txt
Convert and replace a.txt, convert b.txt and write to e.txt:
dos2unix a.txt -n b.txt e.txt
dos2unix -o a.txt -n b.txt e.txt
Convert c.txt and write to e.txt, convert and replace a.txt, convert and
replace b.txt, convert d.txt and write to f.txt:
dos2unix -n c.txt e.txt -o a.txt b.txt -n d.txt f.txt
RECURSIVE CONVERSION
In a Unix shell the find(1) and xargs(1) commands can be used to run
dos2unix recursively over all text files in a directory tree. For
instance to convert all .txt files in the directory tree under the
current directory type:
find . -name '*.txt' -print0 |xargs -0 dos2unix
The find(1) option "-print0" and corresponding xargs(1) option -0 are
needed when there are files with spaces or quotes in the name. Otherwise
these options can be omitted. Another option is to use find(1) with the
"-exec" option:
find . -name '*.txt' -exec dos2unix {} \;
In a Windows Command Prompt the following command can be used:
for /R %G in (*.txt) do dos2unix "%G"
PowerShell users can use the following command in Windows PowerShell:
get-childitem -path . -filter '*.txt' -recurse | foreach-object {dos2unix $_.Fullname}
参考资料:
CRLF_百度百科
百度百科-CRLF
【git系列4/4】如何设置core.autocrlf | core.safecrlf (配置值的含义及最佳实践)
【git系列4/4】如何设置core.autocrlf | core.safecrlf (配置值的含义及最佳实践)-CSDN博客
Git 自动换行符 (autocrlf) 输入是将换行符从 LF 转换为 CRLF 吗
Git 自动换行符 (autocrlf) 输入是将换行符从 LF 转换为 CRLF 吗|极客笔记
https://sourceforge.net/projects/dos2unix
今天的文章windows linux 换行_fgets会读取换行符吗分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83251.html