前回、Linuxで文字コードがUTF-8のファイルに対して、BOM付き⇔BOMなしを変換する方法をご紹介しました。
最近ではあまり意識しなくなりましたが、UTFー8にはBOM(byte order mark)という厄介な存在があります。今回は、LinuxでこのBOMを付けたり外したりする方法をご紹介します。BOMとは?BOMを簡単に説明すると、そのファイルがUnicodeで符号化されているかどうかを、先... UTF-8のBOM付きとBOMなしを変換する方法(Linux) - Minory |
3つの改行コード
面倒なことに、OSによって改行コードが異なります。
LF: UNIXやUnix系のシステム。Linux、AIX、Xenix、macOS、BeOS、Amiga、RISC OSなど。
CR+LF: CP/M、MP/M、MS-DOS、OS/2、Microsoft Windows。
CR: コモドールによるシステム、Apple IIファミリ、Mac OS(バージョン9まで)、OS-9。
改行コード – Wikipedia
普段からよく使う改行コードは、LinuxのLFとWindowのCRLFです。
利用するシステムによっては、これらの改行コードの違いが邪魔して、動かなかったりします。
そこで、LFからCRLF、またはCRLFからLFに変換してみましょう。
改行コードを確認する
fileコマンドを使う
BOM編でもご紹介したfile
コマンドを利用して確認できます。
file sample.txt
このように入力すると、CRLFの場合は以下のように表示されます。
sample.txt : UTF-8 Unicode (with BOM) text, with CRLF line terminators.
「with CRLF line terminators」と表示されればCRLF、無ければLFということになります。
odコマンドを使う
以下のように実行すると、
od -c sample.txt
改行している箇所が「\n
(LF)」または「\r\n
(CRLF)」で表示されます。
詳しくは以下を参照。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「od」コマンドです。 【 od 】コマンド――ファイルを8進数や16進数でダンプする - @IT |
sedコマンドで一括置換
それでは、改行コードを確認したので変換していきます!
一般的には、nkf
コマンドを利用して変換する情報が多いのですが、著者の環境ではnkf
をインストールしておらず、代わりに文字列を置換する際によく使うsed
コマンドで変換します。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。前回、前々回に続き、今回も「sed」コマンドの基礎編を解説します。 【 sed 】コマンド(基礎編その4)――文字列を置き換える/置換した行を出力する - @IT |
sed
コマンドの基本的な使い方は以下の通りです。
sed s/[置換対象文字列]/[置換後の文字列]/ [ファイル名]
LF ⇒ CRLF
まずは、LFをCRLFに変換する方法です。
以下のように、sed
コマンドと正規表現を使って変換します。
sed 's/$/\r/g' sample.txt > lf2crlf.txt
実行したら「lf2crlf.txt」ファイルに対して上記の確認コマンドを実行してみてください。
CRLF ⇒ LF
次は逆のCRLFをLFに変換する方法です。
sed 's/\r//g' sample.txt > crlf2lf.txt
当たり前ですが、正規表現の部分が違うので注意してください。
改行コードの種類 まず大前提としてOSや利用している環境によって、最近では大きく2つの改行を表す文字コードが存… [Linux] 改行コードを変換する - ねこの足跡R |
ハマったところ
sed
の使い方をよく読んでなくて失敗した経験談です。
最初は指定した[ファイル名]をそのまま編集してくれると思ったのですが、置換した結果を表示するだけでした。
そこで、同じファイル名に出力したら上書きしてくれるのかと思いきや、空のファイルになってしまいました。
ですので、上記のサンプルでは後ろに別ファイル名で出力するようにしています。
- Original:https://minory.org/linux-lf-crlf.html
- Source:Minory
- Author:管理者