最主要的是使用seek這個命令,從檔案的末尾開始讀字元。讀到乙個換行符 \n 之後,計數器加一,直到找到符合要求的行數後,讀內容到檔案末尾輸出。支援 –f 部分的想法是,在檔案最後的位置不斷地迴圈讀,發現新內容後就進行輸出。
指令碼存在的問題:不支援多個檔案,tail命令本身是可以支援的;不斷迴圈的效率太低,應該有更好的辦法可以優化。1#
!/usr/bin/ruby
23 line = ar**[0]
4 filename = ar**[1]
56 unless line && filename then
7print
"invalid parameter.\n"8
"usage:ruby tail.rb line filename\n
"9 end
10 line = line.to_i
1112 begin
13 io = open(filename)
14 n = 0
15 lc = 0
16 stack = array.new
1718while lc < line + 1 do
19 n = n + 1
20 io.seek( -n, io::seek_end )
21if io.pos == 0 then
22break
23 end
24#break unless io.seek( -n ,io::seek_end)
25 s = io.read( 1 )
26if /\n/ =~ s then
27 lc = lc + 1
28 end
29 end
3031 io.seek(-n, io::seek_end)
32 s = io.read()
33 last = io.pos
34print s
3536while item = io.read() do
37if ! item.empty? then
38print item
39 last = io.pos
40else
41 io.pos = last
42 end
43 end
44 rescue
45print $@,
"\n"
46 end
Ruby解析XML簡單實現
animation.xml 動畫 黑貓警長 葫蘆娃大頭兒子小頭爸爸 舒克貝塔 貓和老鼠 海綿寶寶 變形金剛 大力水手 史努比的故事 獅子王 clannad 涼宮春日的憂鬱 fate zero 命運石之門 反叛的魯路修 eva潘朵拉之心 test.rb require rexml document i...
簡單的ruby操作
建立here document 多行字串 usr bin ruby w coding utf 8 print eof 這是第一種方式建立here document 多行字串。eof print eof 與上面相同 這是第二種方式建立here document 多行字串。eof print foo b...
Ruby學習 Ruby類的使用
簡單的類定義和呼叫 如下 customer.rbclass customer g number 0 def initialize id,name,address m id id m name name m addr address g number 1 enddef display details ...