Macos 如何在Mac OS X 10.7.4中使用Bash输入0xA(\n)

Macos 如何在Mac OS X 10.7.4中使用Bash输入0xA(\n),macos,bash,Macos,Bash,要输入0xD(\r),我们有^V^M(Ctrl+V,Ctrl+M) 当我在终端中输入^V^J(Ctrl+V,Ctrl+J)时,光标只会跳到新行的开头 ^V^J(Ctrl+V,Ctrl+J)在AIX、ksh中运行良好 其实,问题是: 在文本文件“foo.txt”中,内容是 aaa bbb 在十六进制视图中:61 0D 62 我只想用sed's/^M/^J/g'foo.txt来代替OD到OA 但是结果是sed的/^M/ /g' foo.txt` 在分隔行中。$'…'解释其中的转义码,因此您可以使

要输入0xD(\r),我们有^V^M(Ctrl+V,Ctrl+M)

当我在终端中输入^V^J(Ctrl+V,Ctrl+J)时,光标只会跳到新行的开头

^V^J(Ctrl+V,Ctrl+J)在AIX、ksh中运行良好

其实,问题是:

在文本文件“foo.txt”中,内容是

aaa
bbb
在十六进制视图中:
61 0D 62

我只想用sed's/^M/^J/g'foo.txt来代替
OD
OA

但是结果是sed的/^M/

/g' foo.txt`

在分隔行中。

$'…'
解释其中的转义码,因此您可以使用
$'\n'
向命令行添加一个\n。

问题似乎主要在于如何将输入回显到屏幕上。如果我键入
echo-n'
、Control-V、Control-J、
“| hextump-C
,则表明我键入了换行符

如果我不使用Control-V,那么输出是相同的,尽管bash显示了一个
提示符。在本例中,bash看到了键入的新行,并在引号未终止时提示继续。如果我不使用Control-V,只点击Return而不是Control-J,结果与只点击Control-J是一样的

使用Control-V而不是引号,Control-J被解释为新行,但是bash不会立即看到它。因此,键入
echo foo
、Control-V、Control-J、
echo bar
相当于键入:

echo foo
echo bar
它发出两个
echo
命令并打印:

foo
bar
这两行(如bash或readline所示)分别出现在历史记录中

这样考虑一下,如果您发出以下命令,您希望发生什么

printf "echo foo\necho bar" | sh

(注意,
printf
解释其输入中的转义序列。)Bash将其输入流中的换行符解释为两个单独行之间的分隔符。嗯,当你输入Control-V,Control-J时,它看到了同样的东西,并以同样的方式解释它。

对我来说听起来像是一个终端错误。它在连接到Linux盒的Windows中的PuTTY中做同样的事情。