[戻る] [ゲストブック(書込)] [ゲストブック(閲覧)]
例えば、特定のディレクトリにあるテキストファイルをすべてcatして、パイプを 通してgrepによる検索をかける、なんてことはよくあるが、この方法は次の疑問に 応えてくれない;
検索にひっかかったテキストは、どのファイルに入ってたの?
そこで作ったのがfcatである。どう便利かは、実行結果を見れば一目瞭然。
ui.txt : 快適ユーザインターフェース計画 ui.txt : ui.txt : Linuxを使い始めて3年になるが、その間にデスクトップの環境は幾度となくがら ui.txt : りと一変している。より使いやすい(そしてカッコイイ)UIを求め、様々な環境を ui.txt : 試したからである。かくしてTrial&ErrorによるUIレビューが出来上がったため、 ui.txt : ここらで情報として公開しておこうと思う。 ui.txt : ui.txt : 私が過去に実際使用した環境についてのレビューを、気に入っている順に書く。 ui.txt : ui.txt : なお、使用している環境はCeleron 400MHz,RAM 192MB,1024x768で、快適性 ui.txt : などはこのスペックが基準である。ご参考までに。 ui.txt : (以降省略)
これで、複数ファイルにまとめてgrepかけても、テキストの身元がちゃんと分かる。
01: #!/usr/bin/ruby 02: 03: sft=0; fnote=0 04: 05: while (ARGV[sft]!=nil) 06: 07: begin 08: if (ARGV[sft]!=nil) 09: file = open(ARGV[sft],"r") 10: end 11: rescue 12: STDERR.print "fcat : failed to open file ",ARGV[sft],"\n" 13: sft += 1 14: retry 15: end 16: 17: if (ARGV[sft]!=nil) 18: begin 19: while (a = file.gets) 20: STDOUT.print ARGV[sft]," : ",a 21: end 22: rescue 23: end 24: end 25: 26: sft += 1 27: end
このプログラムは単独のファイルにたいして使っても意味が無い(と思う)。実際は、 冒頭に書いたように次のような使い方が標準となる。
$ ls Kondara2.1_1 Kondara2.1_3 RedHat7.1_2 Turbo7.0_2 Vine2.5 Kondara2.1_2 RedHat7.1_1 Turbo7.0_1 Vine2.1 $ cat Vine2.5 | head -n 10 Canna-3.5b2-39.i386.rpm Canna-devel-3.5b2-39.i386.rpm ElectricFence-2.1-3vl3.i386.rpm FreeWnn-1.1.1-1vl10.i386.rpm FreeWnn-common-1.1.1-1vl10.i386.rpm FreeWnn-devel-1.1.1-1vl10.i386.rpm GConf-1.0.7-0vl2.i386.rpm GConf-devel-1.0.7-0vl2.i386.rpm ImageMagick-5.2.9-0vl6.i386.rpm ImageMagick-c++-5.2.9-0vl6.i386.rpm $ fcat * | grep gtkmm <←ここで使う> Kondara2.1_2 : gtkmm-1.2.8-2k.i586.rpm Kondara2.1_2 : gtkmm-devel-1.2.8-2k.i586.rpm Kondara2.1_2 : gtkmm-doc-1.2.8-2k.i586.rpm Turbo7.0_2 : gtkmm-1.2.5-3.i586.rpm Turbo7.0_2 : gtkmm-devel-1.2.5-3.i586.rpm $上の例は、実際に私のディレクトリにある「パッケージリスト」ファイルである。 つまりは各ディストリビューションのインストールCDに含まれるRPMパッケージを リスト化したファイルで、これにfcatで検索をかけることで、調べたいパッケージ がどのディストリビューションの何番目のCDに入っているのか分かるのである。
Since 2002 by mita-K. @Geo-SiliconValley-4305