Linux初心者のためのLinux sdiffコマンド例


以前の記事の1つでは、Linuxシステム用の9つの最良のファイル比較および差分(Diff)ツールについて説明しました。ファイル間の違いを比較して見つけるためのコマンドラインツールとGUIツールの組み合わせをリストしました。 Linux用のもう一つの便利なdiffユーティリティは sdiff です。

sdiff は、2つのファイルの違いを表示して対話的にマージするためのシンプルなコマンドラインユーティリティです。それは使いやすく、以下で説明されるように簡単な使用法のオプションが付属しています。

sdiff を使用するための構文は次のとおりです。

$ sdiff option... file1 file2

Linuxで2つのファイルの違いを表示

1. sdiff を実行する最も簡単な方法は、比較しようとしている2つのファイル名を指定することです。次のスクリーンショットに示すように、マージされた違いが並べて表示されます。

$ cal >cal.txt
$ df -h >du.txt
$ sdiff du.txt cal.txt

すべてのファイルをテキストファイルとして扱う

2. テキストファイルであるかどうかにかかわらず、すべてのファイルをテキストとして扱い、行ごとに比較するには、 -a フラグを使用します。

$ sdiff -a du.txt cal.txt

Filesystem      Size  Used Avail Use% Mounted on	      |	     April 2018       
udev            3.9G     0  3.9G   0% /dev		      |	Su Mo Tu We Th Fr Sa  
tmpfs           788M  9.7M  779M   2% /run		      |	 1  2  3  4  5  6  7  
/dev/sda10      324G  265G   43G  87% /			      |	 8  9 10 11 12 13 14  
tmpfs           3.9G  274M  3.6G   7% /dev/shm		      |	15 16 17 18 19 20 21  
tmpfs           5.0M  4.0K  5.0M   1% /run/lock		      |	22 23 24 25 26 27 28  
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup	      |	29 30                 
/dev/loop2       82M   82M     0 100% /snap/core/4206	      |	                      
/dev/loop4      181M  181M     0 100% /snap/vlc/190	      <
/dev/loop1       87M   87M     0 100% /snap/core/4407	      <
/dev/loop0      189M  189M     0 100% /snap/vlc/158	      <
/dev/loop3       83M   83M     0 100% /snap/core/4327	      <
cgmfs           100K     0  100K   0% /run/cgmanager/fs	      <
tmpfs           788M   40K  788M   1% /run/user/1000	      <

タブと空白を無視する

3. 空白が多すぎるファイルがある場合は、 -W スイッチを使用して比較しながら、すべての空白を無視するように sdiff に指示できます。

$ sdiff -W du.txt cal.txt

4. -z オプションを使用して、行末の空白を無視するように sdiff に指示することもできます。

$ sdiff -z du.txt cal.txt

5. さらに、 -E フラグを使用して、タブ拡張による変更を無視するように sdiff に指示できます。

$ sdiff -E du.txt cal.txt

違いを比較しながら大文字と小文字を区別しない

6. 大文字と小文字を区別するには( sdiff が大文字と小文字を同じものとして扱う)、表示されているように -i オプションを使用します。

$ sdiff -i du.txt cal.txt

違いを比較しながら空白行を無視します。

7. -B オプションは、ファイル内の空白行を無視するのに役立ちます。

$ sdiff -B du.txt cal.txt

出力する列数を定義する

8. sdiff では、 -w <を使用して、印刷する列数を設定できます(デフォルトは 130 )。次のように切り替えます。

$ sdiff -w 150 du.txt cal.txt

タブをスペースに展開

9. 出力内でタブをスペースに拡張するには、 -t オプションを使用します。

$ sdiff -t du.txt cal.txt

対話的にsdiffを実行する

10. -o フラグを使用すると、よりインタラクティブに実行してファイルに出力を送信できます。このコマンドでは、出力は sdiff.txt ファイルに送信されます。記号が表示されたら Enter を押して、インタラクティブメニューを表示します。

$ sdiff du.txt cal.txt -o sdiff.txt

Filesystem      Size  Used Avail Use% Mounted on	      |	     April 2018       
udev            3.9G     0  3.9G   0% /dev		      |	Su Mo Tu We Th Fr Sa  
tmpfs           788M  9.7M  779M   2% /run		      |	 1  2  3  4  5  6  7  
/dev/sda10      324G  265G   43G  87% /			      |	 8  9 10 11 12 13 14  
tmpfs           3.9G  274M  3.6G   7% /dev/shm		      |	15 16 17 18 19 20 21  
tmpfs           5.0M  4.0K  5.0M   1% /run/lock		      |	22 23 24 25 26 27 28  
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup	      |	29 30                 
/dev/loop2       82M   82M     0 100% /snap/core/4206	      |	                      
/dev/loop4      181M  181M     0 100% /snap/vlc/190	      <
/dev/loop1       87M   87M     0 100% /snap/core/4407	      <
/dev/loop0      189M  189M     0 100% /snap/vlc/158	      <
/dev/loop3       83M   83M     0 100% /snap/core/4327	      <
cgmfs           100K     0  100K   0% /run/cgmanager/fs	      <
tmpfs           788M   40K  788M   1% /run/user/1000	      <
% 
ed:	Edit then use both versions, each decorated with a header.
eb:	Edit then use both versions.
el or e1:	Edit then use the left version.
er or e2:	Edit then use the right version.
e:	Discard both versions then edit a new one.
l or 1:	Use the left version.
r or 2:	Use the right version.
s:	Silently include common lines.
v:	Verbosely include common lines.
q:	Quit.
%

このシナリオでは、使用する前に ed などのエディターをシステムにインストールしておく必要があります。

ファイルを比較するために別のプログラムを呼び出す

11. --diff-program スイッチを使用すると、ファイルを比較するために sdiff 自体以外の別のコマンドラインツールを呼び出すことができます。図のように diff プログラムを呼び出すことができます。

$ sdiff --diff-program=diff du.txt cal.txt

詳しくは、sdiffのマニュアルページを参照してください。

$ man sdiff

この記事では、初心者向けの sdiff コマンドラインツールの例を見ました。ご質問がある場合は、下記のコメントフォームを使用してご連絡ください。