发布于 2026-01-06 3 阅读
0

在 shell 中使用 JavaScript 处理数据!

在 shell 中使用 JavaScript 处理数据!

在 shell 中处理数据非常方便,尤其对于经验丰富的终端用户而言。你可以通过各种命令传递文本数据、重定向数据流、读取和写入文件。

然而,shell 命令种类繁多。相同的命令在不同操作系统上可能具有不同的选项,或者这些选项的含义也可能不同。有些命令甚至存在不同的版本(例如 `--shell` greprgrep`--shell` sgrep、`--shell` 等),每个版本之间都存在一些细微的差别。通常来说,这并不难,只需要花些时间记住并找到自己常用的命令即可。

但如果你是一名 JavaScript 开发者,你还有另一个工具可以选择。随着undercut0.5.0库的发布,一个同名的全新命令行实用程序也随之推出,它允许你使用 JavaScript 构建管道,并在 shell 中实现量子霸权。

要运行此undercut命令,您需要 Node.js 10.13 或更高版本。为了方便使用,建议进行全局安装:

$ npm i -g @undercut/cli
Enter fullscreen mode Exit fullscreen mode

它能做什么?它能做到所有它能undercut push lines做到的事情,外加任何合适的 JavaScript 表达式。

请在引号内用空格分隔说明您的操作:

$ undercut 'op1' 'op2' 'opN'
Enter fullscreen mode Exit fullscreen mode

来自的传入数据stdin将由这些操作逐行顺序处理,并进一步传递给stdout

让我们读取一个文本文件,修剪其中的行,删除长度小于 10 个字符的行,然后将其打印到屏幕上:

#   ↙[read a file]  ↙[pipe it to undercut] 
$ cat strings.txt | undercut 'map(s => s.trim())' 'filter(s => s.length > 10)'
#                               ↖[operation 1]       ↖[operation 2]
Endless world!
A very long string...
Enter fullscreen mode Exit fullscreen mode

如果你曾经使用过数组方法(例如Array.prototype.map()`or`) ,那么它应该非常熟悉Array.prototype.filter()

如果我们想将内容保存到文件而不是显示在屏幕上,那么我们只需要添加stdout重定向,如下所示:

$ cat strings.txt | undercut 'map(s => s.trim())' > processed.txt
#                           [redirect to a file]↗
Enter fullscreen mode Exit fullscreen mode

这是一个标准的壳体机制。但你还可以做更多。

使用可迭代对象作为数据源,而不是stdin

$ undercut -s 'range(0, 5)' 'map(Math.sqrt)' 'sum()'
6.146264369941973
Enter fullscreen mode Exit fullscreen mode

导入已安装的npm软件包并使用它:

$ undercut -i 'pad::left-pad' -s 'range(0, 3)' 'map(x => pad(x, 3))'
000
001
002
Enter fullscreen mode Exit fullscreen mode

或者,您也可以跳过输入源,直接从键盘输入文本数据。stdout输入结束后,结果将打印出来Ctrl + D

$ undercut 'map(s => s.toUpperCase(s))'
Tom
Sam
# Ctrl + D to finish the input.
TOM
SAM
Enter fullscreen mode Exit fullscreen mode

如果您想查看操作列表或了解更多信息undercut,请访问undercut.js.org查看文档或访问 GutHub 代码库查看代码。

文章来源:https://dev.to/spyke/processing-data-in-a-shell-with-javascript-20gp