行末の表示には、Unix表記を使用するファイルとWindows表記を使用する他のファイルがあります。
Unixファイルを見ると、行のvi
末尾には何も表示されません。vi
Windowsファイルを開くと青が表示されます^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
sed
Perlを使用している場合、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
^M
Ctrl-VCtrl-M
またはシェル\r
で説明するようにしてください。
sed -Ee $'s/\r?$/\r/' < infile > outfile
($'...'
ほとんどすべてのシェルはこの構文をサポートしていますが(私が知っている限り)標準ではありません。)
答え2
UNIX2DOSこの場合は効果があります。ところで、プログラムリポジトリのないmacOSを使用しているようですが、sed -e 's/\n/\r\n/' < input.txt > output.txt
少し不便だけです。