- 論壇徽章:
- 0
|
本帖最后由 karma_2015 于 2015-11-24 01:20 編輯
大家好,我在寫一個(gè)*nix shell,現(xiàn)在已經(jīng)有了第一個(gè)版本:github.com/weiweishuo/lsh
lua-shell(lsh)是為不喜歡bash 腳本,不想學(xué)習(xí)sed, awk的程序員設(shè)計(jì)的。
相較bash,它有兩個(gè)特點(diǎn):
1,以lua作為腳本語言。
2,提供一個(gè)內(nèi)建的vim解析器,用來替代sed, awk做文本處理。
下面是幾個(gè)demo,看一遍就知道這個(gè)shell的大概了:
DEMO1
找出當(dāng)前目錄下的文件名結(jié)尾是".cp"的文件, 并在刪除前詢問delete?- for filename in lfs.dir("./") do
- if string.match(filename, ".cp") then
- print("delete " .. filename .. "?" )
- if(io.read() ~= "y" )
- `rm $(filename);
- end
- end
復(fù)制代碼 DEMO2
假如我們有很多文件,它們是按照統(tǒng)一格式命名的:xxx_rgb_xxx.png。 現(xiàn)在,我們想遍歷這些文件,并且提取出"rgb"(像比是0xff0000)字段,以便在后續(xù)操作中使用。- for filename in lfs.dir("./") do
- vim:load(filename)
- :f_lvf_hy: --copy to clipboard for later use
- ... ...
- print(vim:clipboard()) --for example
- end
復(fù)制代碼 DEMO3
假如我們有兩個(gè)文件,分別是:
$ cat abc.txt:
aaa bbb ccc
aaa bbb ccc
aaa bbb ccc
$ cat 123.txt:
111 222 333
111 222 333
111 222 333
現(xiàn)在,我們想合并兩個(gè)文件,得到"result.txt":
aaa 111 bbb 222 ccc 333
aaa 111 bbb 222 ccc 333
aaa 111 bbb 222 ccc 333
那么,對應(yīng)的lsh腳本是:- vim:open("1.txt")
- vi2 = Vi:new()
- vi2:open("2.txt")
- vim:share_clipboard(vi2)
- for i = 0, vi2.lmax do
- vim:Gn(i)
- vi2:Gn(i)
- repeat
- vi2:normal("vey")
- :ea :
- :p
- until vi2:normal("w_") == 0
- end
- vim:write("result.txt")
復(fù)制代碼 |
評分
-
查看全部評分
|