dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

grepで固定文字列の検索

2011-02-22 22:50:21 | linux
grep で文字列を検索するときに、-F を使うとパターンではなく、指定文字列での文字列的な一致になります。

$ cat test.txt
http://abc.com/def/ 200
http://abc.com/ 200

$ grep -F 'http://abc.com/*' test.txt

$ grep 'http://abc.com/*' test.txt
http://abc.com/def/ 200
http://abc.com/ 200

grep の引数をユーザが指定するようなアプリケーションの場合には、パターン文字列のエスケープを考慮しなくてよいので、-F オプションが便利そうです。

ちなみに、tsv ファイルを検索するときなどに、タブを検索文字列に含める場合には、bash では Ctrl-v TAB(Ctrl-iも可) でタブを入力できます。
emacs でプログラム中にタブを埋め込むなら、Ctrl-q TAB(Ctrl-i) です。

rubyでexcelファイルをダウンロードさせるCGI

2011-02-22 01:01:30 | ruby
rubyのCGIでexcelファイルをダウンロードさせるようにする方法です。
Spreadsheet::Workbook#write() の引数に STDOUT を指定するとエラーになるので、Tempfile に書き出しておいて rewind してから read して出力しています。
普通のファイルに書き込むと、エラー処理などが面倒ですが、Tempfile ならファイルが残らないので便利です。


#!/usr/local/bin/ruby

KCODE = 'u'
require 'jcode'
require 'cgi'
require 'tempfile'
require 'rubygems'
require 'spreadsheet'

# シートを作成
book = Spreadsheet::Workbook.new
sheet = book.create_worksheet
sheet[0, 0] = 'テスト1'
sheet[0, 1] = 'テスト2'

# シートを出力
Tempfile.open('/tmp') do |tf|
book.write(tf)
tf.rewind

# ダウンロードファイル名
file_name = "download.xls"

print("Content-Type: application/octet-stream\n")
print("Pragma: private\n")
print("Content-Disposition: attachment; filename=\"#{file_name}\"\n")
print("\n")
print(tf.read)
end