ed は行を連結するために ASCII テキスト、CRLF、LF 行終端を使用しません。

ed は行を連結するために ASCII テキスト、CRLF、LF 行終端を使用しません。

私は現在、WindowsのDebian WSLでGnu edバージョン1.18を実行しています。次のエンコーディングを使用してファイルを編集する場合:

ASCII text, with CRLF, LF line terminators

または

ASCII text, with CRLF,

その後、edは行を正しくリンクできませんj command。代わりに、接続する最初の行を削除します。

この質問はいいえこれはファイルがedで作成された場合に発生しますが、他のプログラムで作成された後にedで編集されたファイルには影響します。 GNU ed 1.17でも同じ問題が発見されました。

これはバグですか?この問題を回避する方法は?

ベストアンサー1

編集者は、ed文書が Unix テキストファイルであると仮定します。 DOSテキストファイル(CRLF行末を持つファイル)が表示されたら、各行末のキャリッジリターン文字を別の文字として扱います。

つまり、次のDOSテキストファイルがある場合(ここでは,lファイルを一覧表示する明示的な方法を使用して表示でき\rます$

line 1\r$
line 2\r$
line 3\r$

...次を使用して、2,3j3行目を2行目の末尾に連結します。

line 1\r$
line 2\rline3\r$

edターミナルに出力すると、カーソルは行line 2\rline3\rの真ん中に含まれているリテラルキャリッジリターンを介して行の先頭に戻り、テキストがline 2消えるように感じます(実際にはそうです)。覆われた通過line 3)。

解決策は、次のツールを使用してドキュメントをUnixテキストに変換するか、または次を使用してエディタdos2unixからすべての1つの末尾のキャリッジリターンを削除することです。

,s/^M$//

...^Mを使用して入力する位置Ctrl+VCtrl+M (リテラルキャリッジリターンを入力します)。

GNUedバージョン1.18以降では、このオプションを使用してエディタを起動することもできます。--strip-trailing-crこのオプションは、ファイルを開くと、行末の単一の末尾のキャリッジリターンを削除します。これがすぐs///上のコマンドが実行するアクションです。

おすすめ記事