回答:
fileユーティリティを使用して、行末のタイプを示すことができます。
Unix:
$ file testfile1.txt
testfile.txt: ASCII text
「DOS」:
$ file testfile2.txt
testfile2.txt: ASCII text, with CRLF line terminators
「DOS」からUnixに変換するには:
$ dos2unix testfile2.txt
Unixから "DOS"に変換するには:
$ unix2dos testfile1.txt
既に変換されたファイルを変換しても効果はないので、いつものように通常の免責事項が適用されますが、盲目的に(つまり、最初にフォーマットをテストせずに)実行しても安全です。
tofrodosで、パッケージをsudo apt-get install tofrodos-あなたが実行する必要があるだろうと同じようにsudo apt-get install dos2unix取得するdos2unixとunix2dos。
dos2unixで失敗?その質問のOPは問題を漠然と説明しているだけです。
でvi...
:set list 行末を確認します。
:set nolist 通常に戻ります。
\nまたは\r\nで表示できないと思いますがvi、ファイルの種類(UNIX、DOSなど)を確認して、行末を推測できます...
:set ff
または、から、または単に返品を表示bashするために使用できます。od -t c <filename>od -c <filename>
:set fileformatがunixどちらであるとdosvimが判断したかを報告します。これはで変更できます:set fileformat=unix。
od -t c file/path、新しいプログラムに感謝します。よくできました!
bashシェルで、を試してくださいcat -v <filename>。これにより、Windowsファイルの改行が表示されます。
(これはWindows XPのCygwinを介してrxvtで私のために働きました)。
編集者注:(CR)文字をcat -v視覚化し\rます。として^M。したがって、行末\r\nシーケンスは^M、各出力行の終わりに表示されます。cat -eさらに\n、つまりとして視覚化し$ます。(cat -etタブ文字をさらに視覚化します^I。)
echo -e 'abc\ndef\r\n' | cat -vと^M、「def」の後にaが表示されるはずです。
^M使用頻度の低いCRを表示するless -uか-u、lessが開いているときに入力します。
man less 言う:
-u or --underline-special Causes backspaces and carriage returns to be treated as print- able characters; that is, they are sent to the terminal when they appear in the input.
fileそして、file -kその後、dos2unix -ihfile通常は十分です。しかし、タフな場合は、file -kまたはを試してくださいdosunix -ih。
詳細は以下。
file -kショートバージョン: file -k somefile.txt教えてくれます。
with CRLF line endingsDOS / Windowsの行末に出力されます。with LF line endingsMAC行末に出力されます。text。(そのため、明示的に言及していない場合line endings、これは暗黙的に「CR行末」を意味します。)ロングバージョンは以下をご覧ください。
PEM証明書ファイルを確認する必要がある場合があります。
レギュラーの問題fileはこれです:時々それはあまりにもスマート/あまりに特定しようとしています。
少しクイズに挑戦してみましょう。いくつかのファイルがあります。そして、これらのファイルの1つは異なる行末を持っています。どれ?
(ちなみに、これは私の典型的な「証明書作業」ディレクトリの1つです。)
定期的にやってみましょうfile:
$ file -- *
0.example.end.cer: PEM certificate
0.example.end.key: PEM RSA private key
1.example.int.cer: PEM certificate
2.example.root.cer: PEM certificate
example.opensslconfig.ini: ASCII text
example.req: PEM certificate request
ええと。行末を教えてくれません。そして、私はそれらが証明書ファイルであることをすでに知っていました。それを伝えるために「ファイル」は必要ありませんでした。
他に何ができますか?
あなたは試してみてくださいdos2unixと--info、このようなスイッチ:
$ dos2unix --info -- *
37 0 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
つまり、「0.example.end.cer」は奇妙な男であるに違いありません。しかし、どのような行末がありますか?dos2unix出力フォーマットを暗記していますか?(私はしません。)
しかし、幸いなことに--keep-going(または-k略して)オプションがありますfile:
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text, with CRLF line terminators\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
優れた!これで、奇数ファイルにDOS(CRLF)の行末があることがわかりました。(そして、他のファイルはUnix(LF)の行末を持っています。これはこの出力では明示的ではありません。これは暗黙的です。これfileは、「通常の」テキストファイルであると期待する方法にすぎません。)
(私のニーモニックを共有したい場合: "L"は "Linux"と "LF"を表します。)
次に、原因を変換して、もう一度試してみましょう。
$ dos2unix -- 0.example.end.cer
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
良い。現在、すべての証明書にUnixの行末があります。
dos2unix -ih上記の例を書いているとき、私はこれを知りませんでした:
実際、次のように-ih(の略--info=h)を使用すると、dos2unixがヘッダー行を提供することがわかります。
$ dos2unix -ih -- *
DOS UNIX MAC BOM TXTBIN FILE
0 37 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
そしてもう1つの「実際の」瞬間:ヘッダーのフォーマットは本当に覚えやすいです:ここに2つのニーモニックがあります:
man fileman dos2unixAccounts.java: Java source, ASCII text\012-WindowsのMinTTY
file -k Accounts.javagit-for-windowsに付属のminttyも試してみましたが、私のバージョンはgit version 2.21.0.windows.1
cat -e file_to_test
を使用xxdして、ファイルの16進ダンプを表示し、「0d0a」または「0a」の文字を探すことができます。
cat -v <filename>@warriorpostmanが示唆するように使用できます。
を使用vim -b filenameして、バイナリモードでファイルを編集できます。これにより、キャリッジリターンの^ M文字が表示され、改行はLFが存在することを示し、WindowsのCRLF行の終わりを示します。LFとは\n、CRとは\r。-bオプションを使用する[unix]と、ステータス行に示されているように、デフォルトでは常にUNIXモードでファイルが編集されます。つまり、新しい行を追加すると、CRLFではなくLFで終わることに注意してください。行末がCRLFのファイルで-bを指定せずに通常のvimを使用する[dos]と、ステータス行にが表示され、挿入された行に行末としてCRLFが表示されます。fileformats設定に関するvimドキュメントは、複雑さを説明しています。
また、Notepad ++の回答についてコメントするのに十分なポイントはありませんが、WindowsでNotepad ++を使用している場合は、[表示]、[記号の表示]、[行末の表示]メニューを使用してCRとLFを表示します。この場合、LFが表示されますが、vimの場合、LFは新しい行で示されます。
^MvimでWindowsの改行を常に表示したい^M場合は、この行を次の行に追加できます.vimrc。
set ffs=unix
これにより、vimは、開いているすべてのファイルをUNIXファイルとして解釈します。unixファイルには\n改行文字が含まれているため、の改行文字を含むWindowsファイル\r\nは引き続き正常にレンダリングされますが(のおかげで\n)^M、ファイルの最後にあります(vimが\r文字をレンダリングする方法です)。
ファイルごとに設定したい場合は:e ++ff=unix、特定のファイルを編集するときに使用できます。
unixvs dos)vimの一番下の行に編集中のファイルタイプを常に表示させたい場合(そしてファイルタイプをunixに強制的に設定しなかった場合)、statuslinewithをに追加できます
set statusline+=\ %{&fileencoding?&fileencoding:&encoding}。
私の完全なステータスラインを以下に示します。に追加するだけ.vimrcです。
" Make statusline stay, otherwise alerts will hide it
set laststatus=2
set statusline=
set statusline+=%#PmenuSel#
set statusline+=%#LineNr#
" This says 'show filename and parent dir'
set statusline+=%{expand('%:p:h:t')}/%t
" This says 'show filename as would be read from the cwd'
" set statusline+=\ %f
set statusline+=%m\
set statusline+=%=
set statusline+=%#CursorColumn#
set statusline+=\ %y
set statusline+=\ %{&fileencoding?&fileencoding:&encoding}
set statusline+=\[%{&fileformat}\]
set statusline+=\ %p%%
set statusline+=\ %l:%c
set statusline+=\
それはのようにレンダリングされます
.vim/vimrc\ [vim] utf-8[unix] 77% 315:6
ファイルの下部
unixvs dos)あなたが持っているファイルのタイプを見たいだけなら、あなたは使うことができます:set fileformat(これはファイルタイプを強制的に設定した場合には機能しません)。unixUNIXファイルおよびdosWindowsの場合に戻ります。
man less。