Macos 如何在Mac OS X 10.7.4中使用Bash输入0xA(\n)
要输入0xD(\r),我们有^V^M(Ctrl+V,Ctrl+M) 当我在终端中输入^V^J(Ctrl+V,Ctrl+J)时,光标只会跳到新行的开头 ^V^J(Ctrl+V,Ctrl+J)在AIX、ksh中运行良好 其实,问题是: 在文本文件“foo.txt”中,内容是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` 在分隔行中。$'…'解释其中的转义码,因此您可以使
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中做同样的事情。