我想过滤和修改tail命令的输出。这就是我的想法:
#!/usr/bin/env bb
(ns script
(:require
[clojure.java.io :as io]
[clojure.string :as str]
))
(->> (line-seq (io/reader *in*)
(filter #(re-find #"^\[.*CONSOLE" %))
(map #(str "carpenter " %)))它适用于正常的尾部。但我想将它用于"tail -f“命令。有什么想法吗?
Thx
发布于 2021-09-19 09:18:05
此示例开始向文件写入两种消息: HELLO和BYE。然后,它启动一个tail -f进程来监视该文件,然后从该进程的输出中读取,并且只捕获BYE行,并在前面显示一个自定义字符串。
(ns tail-example
(:require [babashka.process :as p]
[clojure.java.io :as io]))
(future
(loop []
(spit "my-file.txt" "HELLO\n" :append true)
(spit "my-file.txt" "BYE\n" :append true)
(Thread/sleep 1)
(recur)))
(def tail (p/process
(p/tokenize "tail -f my-file.txt")
;; send stderr to stderr of bb, leave out stream unmodified
{:err :inherit}))
(let [rdr (io/reader (:out tail))]
(binding [*in* rdr]
(loop []
(when-let [l (read-line)]
(when (re-matches #"BYE" l)
(println (str "[log] " l)))
(recur)))))https://stackoverflow.com/questions/69241046
复制相似问题