Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 单个文件中有多个文件结尾$_Linux_Bash_Command Line - Fatal编程技术网

Linux 单个文件中有多个文件结尾$

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,因为

我将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,因为有多行,每行都有一个结束。

$是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