改行コードを無視する
ファイルの差分を取得できるdiff,便利だけど改行コードの違いも取得してきてしまう時がある.
以下2ファイルを用意
改行コードを表示するため -b オプションを付けバイナリモードで表示
$ vim-b hoge.html
<html>^M
<head>^M
<title>hoge</title>^M
</head>^M
<body>^M
</body>^M
</html>^M
$ vim-b foo.html
<html><head><title>foo</title></head><body></body></html>
diffを取る
$ diff foo.html hoge.html
1,7c1,7
< <html>
< <head>
< <title>foo</title>
< </head>
< <body>
< </body>
< </html>
---
> <html>
> <head>
> <title>hoge</title>
> </head>
> <body>
> </body>
> </html>
本来ならtitleタグの行のみ差分として出力されるべき.
しかし改行コードもdiffの対象となっているため、全行が差分として出力されている.
--strip-trailing-crオプションをつけて実行.
$ diff --strip-trailing-cr hoge.html foo.html
3c3
< <title>hoge</title>
---
> <title>foo</title>
無事,ファイル内容の差分のみ取得できた.
空白、改行も無視する
以下2ファイルを用意
$ diff hoge.html foo.html
1,13c1,7
< <html>
<
< <head>
<
< <title>hoge</title>
<
< </head>
<
< <body>
<
< </body>
<
< </html>
---
> <html>
> <head>
> <title>foo</title>
> </head>
> <body>
> </body>
> </html>
以下のオプションを追加($diff helpより抜粋)
-w --ignore-all-space Ignore all white space.
-B --ignore-blank-lines Ignore changes whose lines are all blank.
$ diff -Bw hoge.html foo.html
4,6c3
<
< <title>hoge</title>
<
---
> <title>foo</title>
hogeの前後一行が取得できているのは謎だが,空白、改行を無視できた