プログラム的に(使用せずに)vi
) DOS/Windows の改行を Unix の改行に変換しますか?
およびコマンドはdos2unix
、unix2dos
特定のシステムでは使用できません。、、
などのコマンドを使用して、これらのコマンドをエミュレートするにはどうすればよいですか?sed
awk
tr
ベストアンサー1
DOS から Unix に変換するには、を使用できますtr
。ただし、CR がファイル内で CRLF バイト ペアの最初のバイトとしてのみ表示される場合にのみ、これを安全に実行できます。通常はこれが該当します。次に、次のように使用します。
tr -d '\015' <DOS-file >UNIX-file
名前はDOS-file
名前とは異なることに注意してくださいUNIX-file
。同じ名前を 2 回使用しようとすると、ファイルにデータがなくなることになります。
逆の方法 (標準の 'tr' を使用) は実行できません。
スクリプトにキャリッジ リターンを入力する方法 (Ctrl + M を入力する) がわかっている場合はcontrol-V、control-M次の操作を実行します。
sed 's/^M$//' # DOS to Unix
sed 's/$/^M/' # Unix to DOS
ここで「^M」はコントロールM文字です。bash
ANSI-C 引用符キャリッジリターンを指定するためのメカニズム:
sed $'s/\r$//' # DOS to Unix
sed $'s/$/\r/' # Unix to DOS
しかし、これを頻繁に(大まかに言えば、複数回)行う必要がある場合は、変換プログラム(例:dos2unix
そしてunix2dos
、 多分dtou
そしてutod
)を使用してみてください。
ディレクトリ全体とサブディレクトリ全体を処理する必要がある場合は、以下を使用できますzip
。
zip -r -ll zipfile.zip somedir/
unzip zipfile.zip
これにより、行末が CRLF から CR に変更された zip アーカイブが作成されます。unzip
次に、変換されたファイルを元の場所に戻します (ファイルごとに確認されます。すべて Yes と答えることができます)。この点を指摘してくれた @vmsnomad に感謝します。