新しい行に\n
のみを使用するファイルがありますが、新しい行ごとに\r\n
が必要です。これどうやってするの?
たとえば、Vimで:%s/\n/\r\n/g
を使用して解決しましたが、スクリプトまたはコマンドラインアプリケーションを使用したいと考えています。助言がありますか?
sed
またはgrep
でこれを調べてみましたが、エスケープシーケンスの回避策にすぐに戸惑いました(これらのコマンドは少し緑色です)。
興味があれば、アプリケーションは私の質問/回答に関連しています ここ
nix2dos (Debianにあります)を使用できます。
unix2dos file
この実装は、すべてのCR
の前にLF
を挿入せず、1つ(および1つだけ)だけ前に付いていないLF
sの前にのみCR
を挿入し、バイナリファイル(0x0-> 0x1f範囲のバイト値を含むファイル)をスキップすることに注意してくださいLF
、FF
、TAB
またはCR
よりも)。
またはsed
を使用:
CR=$(printf '\r')
sed "s/\$/$CR/" file
またはawk
を使用:
awk '{printf "%s\r\n", $0}' file
またはPerl
を使用:
Perl -pe 's|\n|\r\n|' file
POSIXでこれを行うのは注意が必要です。
POSIX Sed は\r
または\15
をサポートしていません。たとえあったとしても、インプレースオプション-i
はPOSIXではありません
POSIX Awk は\r
および\15
をサポートしていますが、-i inplace
オプションはPOSIXではありません
d2uおよびdos2unixは POSIXユーティリティ ではありません、ただしexは
POSIX ex は\r
、\15
、\n
または\12
をサポートしていません
改行を削除するには:
awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file
改行を追加するには:
awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
Unixマシン(OS X、Linux)で変換を行う場合は、vi
またはvim
でファイルを開きます。
$ vim my-file
eSCキーを押して、挿入モードになっていないことを確認してから、次のように入力します。
:set ff=dos
または
:set fileformat=dos
これは、ファイル形式を設定することにより、適切な変換を行います。
ファイルを書き込んでエディターを終了するには
:wq
コマンドラインでできること
$ vi +':w ++ff=dos' +':q' my-file
Awkで試すことができます
awk '{print $0 "\r"}'
または
awk -v r=$'\r' '{print $0 r}'
$'\r'
は、ksh93
、bash
、zsh
、mksh
やFreeBSDなどのいくつかのシェルでサポートされているANSI-Cスタイルの引用の例ですsh
おそらく、Single Unix Specificationの第8号に含まれる可能性があります 。
奇妙なキャラクターを表現する一般的な方法を提供します。これを試してみてください。例えば:
awk -v r=$'\U0001F608' '{print $0 r}'
これを行う移植可能なシェル関数:
u2dos() (set -f; IFS='
'; printf '%s\r\n' $(cat "$1"))
それであなたは行うことができます:
u2dos file >dosfile