メモの日々


2010年05月13日(木) [長年日記]

  • わりと暇。

[howto][unix] diffの空白・空行を無視するオプション

diffコマンドのオプションの違いがよくわからなかったのでメモ。使用したdiffは「diff (GNU diffutils) 2.8.1」。

空白を無視する

-b, --ignore-space-change
スペースの数だけが違う場合には違いを無視する。 不完全な行は無視される。
-w, --ignore-all-space
行を比較するときスペースを無視する。 不完全な行は無視される。

という似たようなオプションがある。

a.txt
aaa = 10
bbb = 20
ccc = 30
b.txt
aaa   =    10
  bbb = 20
 c c c = 3  0

という2つのファイルに対し、-bオプションを使うと

% diff -ub a.txt b.txt
--- a.txt       2010-05-13 13:56:24.000000000 +0900
+++ b.txt       2010-05-13 13:56:59.000000000 +0900
@@ -1,4 +1,4 @@
-a.txt
+b.txt
 aaa = 10
-bbb = 20
-ccc = 30
+  bbb = 20
+ c c c = 3  0

となる。空白の数が変わっただけなら差分にならないが、空白が追加されると差分になる。

一方、-wオプションだと

% diff -uw a.txt b.txt
--- a.txt       2010-05-13 13:56:24.000000000 +0900
+++ b.txt       2010-05-13 13:56:59.000000000 +0900
@@ -1,4 +1,4 @@
-a.txt
+b.txt
 aaa = 10
 bbb = 20
 ccc = 30

となり、空白の追加も差分にならなくなる。

空行を無視する

-B, --ignore-blank-lines
空行を挿入・削除するだけの変更を無視する。

というオプションがある。新たに

c.txt

aaa = 10
bbb = 20

ccc = 30

というファイルを用意して-Bオプションを使うと、

% diff -uB a.txt c.txt
--- a.txt       2010-05-13 13:56:24.000000000 +0900
+++ c.txt       2010-05-13 14:01:26.000000000 +0900
@@ -1,4 +1,7 @@
-a.txt
+c.txt
+
 aaa = 10
 bbb = 20
+
 ccc = 30
+

となった。全然空行を無視してくれない。(あと、tDiaryが整形済みテキスト末尾の空行を表示してくれないみたい。)

-uオプションをやめると

% diff -B a.txt c.txt
1c1,2
< a.txt
---
> c.txt
>

となり想像通りに動いた。バグなのかなあ。

[windows][soft] AppliStationが動かなかった

AppliStation1.3.3を使ってみたが、起動して「リストの更新」ダイアログが表示されて処理が進んだ後、「AppliStationのエラー発生」ダイアログが表示され強制終了してしまう。エラーの内容は次の通り。

System.InvalidCastException: 指定されたキャストは有効ではありません。
   場所 NaGet.Packages.Install.UninstallInformation.NewInstance(RegistryKey regKey) 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages.Install\UninstallInformation.cs:行 134
   場所 NaGet.Packages.Install.RegistriedUninstallers.<get_Uninstallers>d__4.MoveNext() 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages.Install\RegistriedUninstallers.cs:行 86
   場所 NaGet.Packages.Install.RegistriedUninstallers.<DetectInstalledPackages>d__d.MoveNext() 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages.Install\RegistriedUninstallers.cs:行 110
   場所 System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   場所 NaGet.Packages.PackageListsManager.DetectSystemInstalledPkgs() 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages\PackageListsManager.cs:行 144
   場所 NaGet.SubCommands.NaGetUpdate.runLocalUpdate() 場所 d:\works\AppliStation\na-get-lib\NaGet.SubCommands\NaGetUpdate.cs:行 182
   場所 NaGet.SubCommands.NaGetUpdate.Run() 場所 d:\works\AppliStation\na-get-lib\NaGet.SubCommands\NaGetUpdate.cs:行 113
   場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   場所 System.Threading.ThreadHelper.ThreadStart()
   場所 NaGet.Packages.Install.UninstallInformation.NewInstance(RegistryKey regKey) 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages.Install\UninstallInformation.cs:行 134
   場所 NaGet.Packages.Install.RegistriedUninstallers.<get_Uninstallers>d__4.MoveNext() 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages.Install\RegistriedUninstallers.cs:行 86
   場所 NaGet.Packages.Install.RegistriedUninstallers.<DetectInstalledPackages>d__d.MoveNext() 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages.Install\RegistriedUninstallers.cs:行 110
   場所 System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   場所 NaGet.Packages.PackageListsManager.DetectSystemInstalledPkgs() 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages\PackageListsManager.cs:行 144
   場所 NaGet.SubCommands.NaGetUpdate.runLocalUpdate() 場所 d:\works\AppliStation\na-get-lib\NaGet.SubCommands\NaGetUpdate.cs:行 182
   場所 NaGet.SubCommands.NaGetUpdate.Run() 場所 d:\works\AppliStation\na-get-lib\NaGet.SubCommands\NaGetUpdate.cs:行 113
   場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   場所 System.Threading.ThreadHelper.ThreadStart()

「d:\works\AppliStation\」という謎のフォルダ名が出力されているのがオソロシ。「指定されたキャストは有効ではありません。」というエラーなんだからバグなんだろうなあ。余裕があればバグ報告するかも。

でもソフトの自動ダウンロードをされるのは少し怖い。AppliStation開発元の情報をもっと開示した方がいいと思うんだけれど。

やること

  • クリーニング
  • 請書