各改行文字の前にキャリッジリターンを追加するには?

各改行文字の前にキャリッジリターンを追加するには?

新しい行でのみ機能するファイルがあり、すべての新しい行で機能するには\nこのファイルが必要です。\r\nどうすればいいですか?

たとえば、Vimを使用してこの問題を解決しましたが、:%s/\n/\r\n/gスクリプトまたはコマンドラインアプリケーションを使用したいと思います。どんな提案がありますか?

sedorを使ってthisを見つけようとしましたが、grepエスケープシーケンスの回避策にすぐに混乱しました(私はこのコマンドに最初に触れました)。

興味があれば、このアプリケーションは私の質問/回答に関連しています。ここ

答え1

あなたはそれを使用することができますUNIX2DOS(Debian で発見):

unix2dos file

この実装は、CRすべてのsの前にaを挿入せず、まだ1が前に来ていないsのみをLF挿入し、バイナリファイル(0x0 -> 0x1fの範囲のバイト値を含むファイルを除く)をスキップします。 、、、または)。LFCRLFFFTABCR

または以下を使用してくださいsed

CR=$(printf '\r')
sed "s/\$/$CR/" file

または以下を使用してくださいawk

awk '{printf "%s\r\n", $0}' file

または:

awk -v ORS='\r\n' 1 file

または以下を使用してくださいperl

perl -pe 's|\n|\r\n|' file

答え2

これが正しいunix2dosする:

$ unix2dos file.txt

file.txtこれはCRLF行末のあるバージョンに置き換えられます。

これを行うには、sed各行の末尾にキャリッジリターンを挿入します。

sed -e 's/$/\r/' file.txt

これは(s)行末の前のサイズが0の領域($)そして\r。内部交換(unix2dosこの作業など)を実行するには、sed -i.bak非標準の拡張であるにもかかわらず使用してください。その拡張がない場合は、一時ファイルを使用してください。

答え3

Unixシステム(OS X、Linux)から変換する場合は、vi次のファイルを使用または開きますvim

$ vim my-file

ESCキーを押して挿入モードでないことを確認し、次のように入力します。

:set ff=dos

または

:set fileformat=dos

これは適切な変換のためのファイル形式を設定します。

ファイルに書き込んでエディタを終了するには、次のようにします。

:wq

コマンドラインでできること

$ vi +':w ++ff=dos' +':q' my-file

答え4

移植可能なシェル関数は次のことができます。

u2dos() (set -f; IFS='
'; printf '%s\r\n' $(cat "$1"))

だからあなたはこれを行うことができます:

u2dos file >dosfile

関連情報