美文网首页newLISP
2.newLISP脚本操作(newLISP 代码模式 v.10

2.newLISP脚本操作(newLISP 代码模式 v.10

作者: newlisp | 来源:发表于2018-02-07 15:09 被阅读0次

    命令行参数

    在 Linux/Unix系统下, 将下面的代码写在脚本文件的第一行:

    `#!/usr/bin/newlisp`

    指定一个更大的堆栈:

    `#!/usr/bin/newlisp -s 100000`

    或者

    `#!/usr/bin/newlisp -s100000`

    不同系统的Shell在解析第一行和提取参数的处理方式是不一样的。newLISP可以处理联合和分开两种参数传递方式(如上).下面这段简单的代码可以用来测试各种系统的参数处理方式. 脚本将堆栈设置成100,000 ,内存最大占用量限制在10M以内.

    ```

    #!/usr/bin/newlisp -s 100000 -m 10

    (println (main-args))

    (println (sys-info))

    (exit) ; important

    ```

    下面是某个系统的输出数据:

    ```

    ./arg-test

    ("/usr/bin/newlisp" "-s" "100000" "-m" "10" "./arg-test")

    (308 655360 299 2 0 100000 8410 2)

    ```

    记住只有少数newLISP程序需要修改更大的堆栈参数; 大部分情况下默认的2048已经够用了. 每个堆栈平均消耗80个字节. 其余的newLISP参数选项,爬手册去吧。

    管道交互

    下面代码展示了如何将一个文件通过管道输入到newLISP 脚本中.

    ```

    #!/usr/bin/newlisp

    #

    # uppercase - demo filter script as pipe

    #

    # usage:

    #          ./uppercase < file-spec

    #

    # example:

    #          ./uppercase < my-text

    #

    #

    ​   

    (while (read-line) (println (upper-case (current-line))))

    ​   

    (exit)

    ```

    文件内容将会被转换成大写然后打印到标准输出 (std-out).

    下面的代码能够处理非文本的二进制文件(包含了0字符):

    ```

    #!/usr/bin/newlisp

    ;

    ; inout - demo binary pipe

    ;

    ; read from stdin into buffer

    ; then write to stdout

    ;

    ; usage: ./inout < inputfile > outputfile

    ;

    (while (read 0 buffer 1024)

        (write 1 buffer 1024))

    (exit)

    ```

    将缓冲区大小设置到最高效的尺寸.

    文件过滤

    下面的脚本类似Unix下的 grep , 遍历每一个文件,并用正则表达式过滤文件中的每一行.

    ```

    #!/usr/bin/newlisp

    #

    # nlgrep - grep utility on newLISP

    #

    # usage:

    #          ./nlgrep "regex-pattern" file-spec

    #

    # file spec can contain globbing characters

    #

    # example:

    #          ./nlgrep "this|that" *.c

    #

    # will print all lines containing 'this' or 'that' in *.c files

    #

    ​   

    (dolist (fname (3 (main-args)))

        (set 'file (open fname "read"))

        (println "file ---> " fname)

        (while (read-line file)

            (if (find (main-args 2) (current-line) 0)

                (write-line)))

        (close file))

    (exit)

    ```

    表达式:

    `(3 (main-args))`

    相当于:

    `(rest (rest (rest (main-args))))`

    返回一个包含了所有文件的列表. 这种为rest指定索引的形式称为隐式索引. 隐式索引细节或其它用法参考用户手册. 表达式` (main-args 2)` 提取命令行的第三个参数作为正则表达式.

    newLISP 作为管道

    管道直接将每行简短的代码输入到newLISP中执行运算。

    ```

    ~> echo '(+ 1 2 3)' | newlisp

    6

    ~>

    ```

    相关文章

      网友评论

        本文标题:2.newLISP脚本操作(newLISP 代码模式 v.10

        本文链接:https://www.haomeiwen.com/subject/uftazxtx.html