回答:
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
どちらであるとdos
vimが判断したかを報告します。これはで変更できます: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 -ih
file
通常は十分です。しかし、タフな場合は、file -k
またはを試してくださいdosunix -ih
。
詳細は以下。
file -k
ショートバージョン: file -k somefile.txt
教えてくれます。
with CRLF line endings
DOS / Windowsの行末に出力されます。with LF line endings
MAC行末に出力されます。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 file
man dos2unix
Accounts.java: Java source, ASCII text\012-
WindowsのMinTTY
file -k Accounts.java
git-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は新しい行で示されます。
^M
vimでWindowsの改行を常に表示したい^M
場合は、この行を次の行に追加できます.vimrc
。
set ffs=unix
これにより、vimは、開いているすべてのファイルをUNIXファイルとして解釈します。unixファイルには\n
改行文字が含まれているため、の改行文字を含むWindowsファイル\r\n
は引き続き正常にレンダリングされますが(のおかげで\n
)^M
、ファイルの最後にあります(vimが\r
文字をレンダリングする方法です)。
ファイルごとに設定したい場合は:e ++ff=unix
、特定のファイルを編集するときに使用できます。
unix
vs dos
)vimの一番下の行に編集中のファイルタイプを常に表示させたい場合(そしてファイルタイプをunixに強制的に設定しなかった場合)、statusline
withをに追加できます
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
ファイルの下部
unix
vs dos
)あなたが持っているファイルのタイプを見たいだけなら、あなたは使うことができます:set fileformat
(これはファイルタイプを強制的に設定した場合には機能しません)。unix
UNIXファイルおよびdos
Windowsの場合に戻ります。
man less
。