gpt4 book ai didi

带管道的 Scala 进程

转载 作者:行者123 更新时间:2023-12-04 17:53:32 26 4
gpt4 key购买 nike

我正在尝试在 scala 中运行这样的 bash 命令:

cat "example file.txt" | grep abc

Scala 有一个特殊的流程管道语法,所以这是我的第一个方法:

val filename = "example file.txt"
(Process(Seq("cat", filename)) #| Process(Seq("grep", "abc"))).run()

据我所知,这会执行第一个进程,将输出读回 scala 并将其提供给第二个进程。问题是,出于性能原因,我想在不离开终端的情况下执行这两个进程。该文件很大,我不需要整个输出,这就是我首先使用 grep 的原因。因此,我的第二种方法是:

val filename = "example file.txt"
(Process(Seq("bash", "-c", "cat " + filename + " | grep abc"))).run()

这里的问题是,如果文件名有空格,它就会中断。我可以尝试转义空格,但我宁愿让 scala 为我做这件事(我还需要转义许多其他字符)。

还有其他方法可以运行此命令吗?

最佳答案

转义文件名很容易:

val escapedFilename = "'" + filename.replace("'", "'\\''") + "'"

但正确的做法是将文件名直接传递给 grep:

Process(Seq("grep", "abc", filename)).run()

在 shell 中等价于此:

grep abc "example file.txt"

关于带管道的 Scala 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24298281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com