0

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

16進表示の場合:61 61 61 0D 62 62 62

に置き換えるためにsed's/ ^ M / ^ J /g'foo.txtを使用するのが好きです。ODOA

しかし、結果はsed 's/^M/

/g' foo.txt`

分離された行で。

4

2 に答える 2

2

$'...'内のエスケープ コードを解釈するため$'\n'、コマンド ラインに \n を追加するために使用できます。

于 2012-05-19T00:54:07.590 に答える
0

問題は主に、入力が画面にエコーされる方法にあるようです。echo -n '、Control-V、Control-J、と入力' | hexdump -Cすると、改行文字を入力したことが示されます。

Control-V を省略すると、出力は同じになりますが、bash は>プロンプトを表示します。この場合、bash は入力された改行を認識し、引用符が終了していないため継続を求めています。Control-V を使用せず、Control-J の代わりに単に Return を押した場合、結果は Control-J を押した場合と同じになります。

引用符ではなく Control-V を使用すると、Control-J は改行として解釈されますが、bash はすぐには認識しません。したがって、echo foo、Control-V、Control-Jと入力することは、次のecho barように入力することと同じです。

echo foo
echo bar

echo2 つのコマンドを発行して、次のように出力します。

foo
bar

2 つの行 (bash または readline で表示される) は、両方とも個別に履歴に含まれています。

このように考えてみてください。次のコマンドを発行した場合、何が起こると思いますか?

printf "echo foo\necho bar" | sh

printf(入力内のエスケープ シーケンスを解釈することに注意してください。) bash は、入力ストリーム内の改行を 2 つの別々の行の間の区切り記号として解釈します。Control-V、Control-J と入力すると、同じものを認識し、同じように解釈します。

于 2012-05-19T10:00:47.103 に答える