首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用babashka过滤tail的输出

如何使用babashka过滤tail的输出
EN

Stack Overflow用户
提问于 2021-09-19 07:01:51
回答 1查看 200关注 0票数 3

我想过滤和修改tail命令的输出。这就是我的想法:

代码语言:javascript
复制
#!/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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-19 09:18:05

此示例开始向文件写入两种消息: HELLO和BYE。然后,它启动一个tail -f进程来监视该文件,然后从该进程的输出中读取,并且只捕获BYE行,并在前面显示一个自定义字符串。

代码语言:javascript
复制
(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)))))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69241046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档