LoginSignup
66
51

More than 5 years have passed since last update.

改行コード、空白、改行を無視してdiffを取る

Last updated at Posted at 2014-09-06

改行コードを無視する

ファイルの差分を取得できる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の前後一行が取得できているのは謎だが,空白、改行を無視できた

66
51
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
66
51