Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

改行コードを無視する

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


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>