今回はdiffで差分がないところだけ出力してみます。
前提
比較するファイルは以下のようなものを用意しています。
$ cat foo.txt AAAAA BBBBB CCCCC
$ cat bar.txt CCCCC DDDDD EEEEE
実行コマンド
以下のコマンドでdiffで差分のない部分だけを出力することができます。
$ diff --old-line-format='' --unchanged-line-format='%L' --new-line-format='' foo.txt bar.txt CCCCC
共通部分CCCCC
だけが出力できました!
ちょっとした解説
diffにいろいろな長いオプションをつけていてよくわからないと思いますので解説していきます。
まず、今回はdiffのif-then-else形式と呼ばれる形式で差分を表示しています。
(-D
や--old-line-format
などのオプションを指定してあげるとその形式になります。)
if-then-else形式とは以下のように比較結果を出力する形式です。
$ diff -D=test foo.txt bar.txt #ifndef =test AAAAA BBBBB #endif /* ! =test */ CCCCC #ifdef =test DDDDD EEEEE #endif /* =test */
続いてそれらで利用しているオプションの解説です。
--old-line-format=''
は1番目のファイルだけにある行の出力のフォーマットを決めるオプションです。
これを''
とすることで出力しないようにしています。
--new-file-format=''
も同様です。
2番めのファイルの出力をしないように指定しています。
--unchanged-line-format='%L'
は両方のファイルに共通な行を出力する際のフォーマットです。
%L
はman diff曰く
%L contents of line
とのことです。
行の内容をそのまま出力する。という意味で利用しています。
おわりに
共通部分を出力するだけなのにコマンドとしては少し長くなってしまいますが、シェルスクリプト内などで利用すると結構便利だったりするのではないでしょうか?
おためしください!!!
- 作者: 斉藤博文
- 出版社/メーカー: 翔泳社
- 発売日: 2017/01/31
- メディア: Kindle版
- この商品を含むブログを見る