Unix ファイルの行末を Windows ^M に変更しても機能しません。

Unix ファイルの行末を Windows ^M に変更しても機能しません。

行末の表示には、Unix表記を使用するファイルとWindows表記を使用する他のファイルがあります。

Unixファイルを見ると、行のvi末尾には何も表示されません。viWindowsファイルを開くと青が表示されます^M

ここに画像の説明を入力してください。

問題は、中央の下から行に^M青い(??)が含まれていないことです。

^Mファイル全体をすべての行に変換しようとしています。

私は多くのコマンドを試しましたが、特にこれは

sed -e 's/$/^M/' < input.txt > output.txt

"^ M"をasの代わりに2文字として追加すると、すでに正しい文字がある行でもこれが行われますCommand-M^M

私も試しました

sed -e 's/\r/^M/' < input.txt > output.txt

そして

sed -e 's/\n/^M/' < input.txt > output.txt

成功しませんでした...

Issue a cat -e input.txt^M 正しい行に以下が表示されます。

1895;2;3;5;10;14;34^M$
1896;3;6;14;15;21;25^M$
1897;9;22;25;47;52;58^M$
1898;12;34;45;53;55;58^M$

これはほとんど間違っています。

1899;20;23;35;36;44;48$
1900;8;11;27;28;43;46$
1901;11;12;26;30;37;53$
1902;02;07;09;18;21;25$
1903;09;10;15;28;43;45$

command-mを使用してすべての行を取得する方法は?

ベストアンサー1

sedPerlを使用している場合、Perlを使用することは他のバージョンなどを見回す最も簡単な方法です。

perl -pe 's/\r?$/\r/' < infile > outfile

またはその場で:

perl -i.bak -pe 's/\r?$/\r/' infile 

これにより、既にキャリッジリターンがある行を除くすべての行の末尾にキャリッジリターンが追加されます。 (または実際には0または1 CR:sを1 CRに置き換えます。)


テスト:

$ cat -e infile
with cr^M$
no cr$
still no cr$

$ perl -pe 's/\r?$/\r/' < infile |cat -e
with cr^M$
no cr^M$
still no cr^M$

$ perl --version
This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level
[...]

どこかmacOSへの言及を見たようです。それがあなたが使用しているものであれば、問題はsedそれが提供する機能がGNU sedがサポートするものの半分をサポートしていないことです。私のMacの製品がそれをサポートしていないよう\rです\xHH...

ただし、コマンドラインにリテラルキャリッジリターンを貼り付けることはできます。

sed -Ee 's/^M?$/^M/' < infile > outfile

2つの文字とhere^Mの代わりに単一のキャリッジリターンがあります。文字を入力する必要があります。^M^MCtrl-VCtrl-M

またはシェル\rで説明するようにしてください。

sed -Ee $'s/\r?$/\r/' < infile > outfile

$'...'ほとんどすべてのシェルはこの構文をサポートしていますが(私が知っている限り)標準ではありません。)

おすすめ記事