使用Ruby簡單實現的tail命令,支援動態輸出

2021-09-08 03:21:37 字數 1318 閱讀 4274

最主要的是使用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

print

"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 ...