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

时间:2012-05-19 00:42:18

标签: macos bash

要输入0xD(\ r \ n),我们有^ 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 61 61 0D 62 62 62

我只想使用 sed' s / ^ M / ^ J / g' foo.txt OD替换为OA

但结果是sed 's/^M/

/g' foo.txt`

分隔线。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

问题似乎主要在于输入如何回显到屏幕。如果我输入echo -n ',Control-V,Control-J,' | hexdump -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时,它会看到相同的东西并以同样的方式解释它。