70
63

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

複数ファイルの改行コードをCRLF→LFに一括置換する

Last updated at Posted at 2019-03-26

プロジェクト内でWinユーザーとmacユーザーが混在したことにより、改行コードがCRLFのファイルとLFのファイルが混在する形となってしまい、LFに統一する対応を行なった際のメモ。

※LF→CRLFの置換だと勝手が違うようなので、あくまでCRLF→LFの前提で書いていきます。

下準備:VSCodeで改行コードを可視化する

改行を可視化するプラグインをインストールします。
下記以外にも種類があるので、自分が使いやすいものを選びましょう。

code-eol
 →様々な改行記号に対応しています。

line-endings
 →CR、LFという文字で改行が表されます。
 見た目がわかりやすかったので今回はこちらを使いました。

line-endingsで改行を可視化する際は、VSCodeの設定からsettings.jsonを開き、以下を追記します。

settings.json
"editor.renderControlCharacters": true

これで改行が可視化されます。
スクリーンショット 2019-03-26 12.42.09.png

CRLFを含むファイルを検索

今回はCRLF→LFの置換を行うので、CRLFを含むファイルを検索します。

VSCode上で検索

検索タブを開き、入力バーの「正規表現を使用する」 (.* ←こんなボタン)をONにします。
この状態で、検索バーに \n\r\n と入力して検索すると、該当する改行コードを含むファイルがヒットします。
(ファイルの数によっては膨大な検索結果がヒットしVSCodeに絞り込みを要求されますので、あまりお勧めではないかもしれません)

コマンドで検索

置換時にコマンドを流用できることを考えるとこちらがおすすめです。
cdコマンドで置換対象のファイルがあるディレクトリに移動し、以下のコマンドを実行します。

// 例) カレントディレクトリの全てのファイルから検索
$ find . -type f | xargs file | grep CRLF

// 例) phpファイルに限定して検索
$ find . -name '*.php' | xargs file | grep CRLF

findコマンドのオプションを変えることで検索条件を変えられます。

CRLF→LFに置換する

検索コマンドの延長で、置換対象のファイルを引数として(xargsコマンドで渡して)改行コードを置換するコマンドを(先ほどと同じカレントディレクトリで)実行します。
以下はnkfコマンド、dos2unixコマンドを用いた方法です。

// nkfコマンドを使用
find . -type f | xargs file | grep CRLF | awk -F: '{print $1}' | xargs nkf -Lu --overwrite

// dos2unixを使用
find . -type f | xargs file | grep CRLF | awk -F: '{print $1}' | xargs dos2unix

実行後、ファイルの改行コードが置換されます。
スクリーンショット 2019-03-26 14.52.34.png

改めてCRLFを含むファイルを検索して、何もヒットしなければOK。

参考

CRLFが含まれているファイルを手っ取り早く探して置換
色々な改行コード変換の方法

70
63
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
70
63

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?