要输入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`
分隔线。
答案 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时,它会看到相同的东西并以同样的方式解释它。