Linux 单个文件中有多个文件结尾$
我将windows中IntelliJ IDE中的一些枚举值复制粘贴到记事本,将文件保存在共享驱动器中,然后在linux框中打开。当我在文件上做cat-A时,它显示了如下内容:Linux 单个文件中有多个文件结尾$,linux,bash,command-line,Linux,Bash,Command Line,我将windows中IntelliJ IDE中的一些枚举值复制粘贴到记事本,将文件保存在共享驱动器中,然后在linux框中打开。当我在文件上做cat-A时,它显示了如下内容: A,B,C,^M$ D,E,F,^M$ G,H,I,^M$ 在四处搜索之后,我发现^M是回车,而$是文件的最后一行。我只是对这个文件如何能够在我的GNU盒上有多个$s感到困惑。来自man cat: -A, --show-all equivalent to -vET 剪断 因此,有多个$s,因为
A,B,C,^M$
D,E,F,^M$
G,H,I,^M$
在四处搜索之后,我发现^M是回车,而$是文件的最后一行。我只是对这个文件如何能够在我的GNU盒上有多个$s感到困惑。来自man cat:
-A, --show-all
equivalent to -vET
剪断
因此,有多个$s,因为有多行,每行都有一个结束。$是cat-A的行结束标记,而不是文件结束
这表示文件具有Windows样式的行尾回车符,后跟换行符,而不是Unix样式的换行符
您可以使用dos2unix或unix2dos程序将文本文件从一种格式转换为另一种格式。谢谢您的回答!这就是我没有更仔细地阅读手册的原因。我希望我能接受这两个答案,因为Porges将其与windows/linux换行代码的差异联系在一起,我将选择他的答案。再次感谢您的投入!:我显然有点偏见,但你真正的问题是为什么我有多个$s;你回了马车,自己咬了一口;P我开玩笑说,同时,很高兴你被分类了,是的,人是一个无价的工具!哦,我真的希望我们可以选择两个答案,尽管这有点奇怪。啊,是的!有没有办法将windows样式的线条结尾与sed匹配?我尝试过sed的/\r\n//但没有使用sed。下线字符“\n”不被视为行的一部分。一些正则表达式引擎有一个单行模式,它将整个输入视为一行,但没有sed AFAIK。如果要匹配“\r\n”,可以改为使用“\r$”,它与行末尾的“\r”匹配,因此是等效的。一个有趣的事实是,终端实际上会将“\r”解释为返回到行的开头,这是它的原始含义,所以如果在“\r\n”上执行sed的/$/…/”,则会导致“…”覆盖每一行。像hello这样的行\r\n会变成hello\r…。\n所以终端最后会写…lo。这就消除了我的困惑。我想知道为什么与sed snip-sed匹配会如此复杂:a;N、 美元!文学士;s/\n//g'。事实很有趣,我怀疑这起源于打字机时代。感谢您的帮助:
-E, --show-ends
display $ at end of each line