ファイルからCRをCRLF行末に変換するには?

ファイルからCRをCRLF行末に変換するには?

行終端を持つASCIIテキストファイル(Macスタイル)は、行終端(DOS / Windowsスタイル)CRに変換する必要があります。CRLF

CRフォローしていないものを検索してにLF置き換えます。したがって、繰り返しコマンドはファイルを破損しません()。CRCRLFCRCRLF

試してみましたが、unix2dos変換に失敗しました。

Python/vimなしでネイティブArch Linuxコンソールからこのファイルをどのように変換できますか?

答え1

dos2unixこのユーティリティ(DOSからUnixテキスト形式にファイルを変換するユーティリティ)をインストールすると、それぞれMacテキストファイルからUnixテキストファイル形式へ、UnixからDOSへの変換を実行し、ユーティリティも提供されmac2unixます。その後、Unixテキストを中間形式として使用して、Macテキスト形式をDOSテキスト形式に変換unix2dosできます。mac2unixunix2dos

mac2unix myfile
unix2dos myfile

同じファイルまたはファイルセットに対して複数回実行するのは安全です。

BusyBox(Alpine Linuxなど)には組み込みコマンドとdos2unixコマンドunix2dosがありますが、mac2unixコマンドはありません。したがって、BusyBoxシステムでは、dos2unixこのパッケージにアクセスするためにこのパッケージもインストールする必要がありますmac2unix

答え2

Mac2dosファイルはPerlを使って変換できます:

$ perl -pe 's/\r\n|\n|\r/\r\n/g' input-file.txt > output-file.crlf

またはインライン:

$ perl -pi -e 's/\r\n|\n|\r/\r\n/g' file-to-convert

源泉:https://stackoverflow.com/a/14155400/529778そしてhttps://stackoverflow.com/a/6374360/529778

答え3

「...なしでネイティブArch Linuxコンソールでこのファイルを変換するにはどうすればいいですか?」 。 CRをCRLFに:

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

たとえば、

$ printf 'foo\rbar\r' | cat -ve
foo^Mbar^M$

$ printf 'foo\rbar\r' | awk -v RS='\r' -v ORS='\r\n' '1' | cat -ve
foo^M$
bar^M$

また、「繰り返しコマンドはファイルを破損させません(CRCRLFを使用)」と述べましたが、入力を読み取ってファイルがあるかどうかを知る方法がないので、再び呼び出されるコマンドを強力に処理する方法がないと思います。 sがそこに配置される前にツールを実行するときにその中にある場合、または元の入力からsの後にsが\r\nある場合は、そうしないでください。\n\r

関連情報