Linux Bash命令,如果输入到终端而不是复制和粘贴,则会产生不同的结果

Linux Bash命令,如果输入到终端而不是复制和粘贴,则会产生不同的结果,linux,bash,terminal,ubuntu-18.04,cut,Linux,Bash,Terminal,Ubuntu 18.04,Cut,linux新手,通过VirtualBox在运行Ubuntu的虚拟机上练习bash。 使用命令打印文本文件中每行的第一个字符,以产生正确的输出: cut -f 1- -d "^M" sample.txt | cut -c 1 但是,当我从终端复制命令并使用Ctrl+Shift+c和Crtl+Shift+v将其粘贴回终端,然后执行时,会出现以下错误: cut: the delimiter must be a single character 编辑:我通过按住Ctrl+v并点击回车键键入“^M”

linux新手,通过VirtualBox在运行Ubuntu的虚拟机上练习bash。 使用命令打印文本文件中每行的第一个字符,以产生正确的输出:

cut -f 1- -d "^M" sample.txt | cut -c 1
但是,当我从终端复制命令并使用Ctrl+Shift+c和Crtl+Shift+v将其粘贴回终端,然后执行时,会出现以下错误:

cut: the delimiter must be a single character
编辑:我通过按住Ctrl+v并点击回车键键入“^M”


编辑:没有意识到Cut命令对每一行都有作用,所以给出的示例中的第一部分命令是无用的,即使如此,问题仍然有效。

您可以尝试使用
dos2unix
命令,而不是使用bash脚本替换Windows文件中的
^M
,这正是此命令的作用。

您可以尝试使用
dos2unix
命令,而不是使用bash脚本替换Windows文件中的
^M
,这正是这个命令的作用。

我所知道的Linux中唯一一种情况是,在屏幕上键入ctrlv,然后输入Enter,然后在文本编辑器vimgvim中出现
^M

在这种情况下,文件中输入的文本实际上是回车符,但在屏幕上,您可以看到两个字符
^M
。因为你看到的是而不是你得到的,复制和粘贴它会导致不可预测的结果


在Linux中,行不是通过回车符(十六进制代码
0d
或ctrlm)分隔的,而是通过换行符(十六进制代码
0a
或ctrlj)分隔的

在这种情况下,文件中输入的文本实际上是回车符,但在屏幕上,您可以看到两个字符
^M
。因为你看到的是而不是你得到的,复制和粘贴它会导致不可预测的结果


在Linux中,行不是通过回车符(十六进制代码
0d或ctrlm)分隔的,而是通过换行符(十六进制代码
0a或ctrlj)分隔的。

确定没有前导空格或换行符吗?删除
cut-f 1--d“^M”
。只需
cut-c1 sample.txt
。如果
“^M”
确实是回车字符,那么
剪切-f 1--d“^M”
是一种删除dos行尾的有趣方式。如何键入
“^M”
?您是键入
^
后接
M
还是按
CTRL
+
M
?请在你的问题中回答这个问题。绝对没有前导尾随空格或换行符,我认为Bodo在正确的轨道上,当我输入^M而不是Crtl+v+CarineReturn时,我会得到相同的错误,如果有人能清楚地解释为什么会发生这种情况,那么我将接受以下回答:您确定没有前导空格或换行符吗?删除
cut-f 1--d“^M”
。只需
cut-c1 sample.txt
。如果
“^M”
确实是回车字符,那么
剪切-f 1--d“^M”
是一种删除dos行尾的有趣方式。如何键入
“^M”
?您是键入
^
后接
M
还是按
CTRL
+
M
?请在你的问题中回答这个问题。绝对没有前导尾随空格或换行符,我认为Bodo在正确的轨道上,当我输入^M而不是Crtl+v+CARERERETURN时,我会得到相同的错误,如果有人能清楚地解释为什么会发生这种情况,那么我将接受回答,我实际上使用ubuntu上的默认终端是GNOME,但不管怎样,我认为你的解释仍然适用。我实际上使用的是ubuntu上的默认终端GNOME,但不管怎样,我认为你的解释仍然适用