19 个版本

0.4.2 2023年12月19日
0.4.0 2022年10月9日
0.3.5 2022年2月8日
0.3.3 2021年11月19日
0.2.2 2020年11月24日

文本编辑器 中排名 58

Download history 193/week @ 2024-03-12 6/week @ 2024-04-02

每月下载量 65

Unlicense OR MIT

28KB
608

tests passing

shell-string

简单的 CLI 用于执行常见的字符串操作

使用方法

shell-string 0.4.2
Cli for common string operations. Takes input from stdin.

USAGE:
    string <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    case          Transform upper- or lowercase
    chars         Prints all chars on separate lines
    distinct      Output the set of input strings without repetitions, in order
    foreach       Applies a command to each line of input. Lines won't get applied as stdin to the command, instead
                  the command may contain the token "__var", which will get substituted with the individual lines
    help          Prints this message or the help of the given subcommand(s)
    interleave    Interleave input and only print every nth line
    length        Returns the length the input string
    line          Pick a single line by linenumber
    map           Maps each line of input to a given command. The input will be supplied as stdin of the command
    replace       Replace all matching words
    reverse       Reverse order of lines
    split         Split up a string by a separator and print the parts on separate lines
    substr        Extract a part of a given string
    template      Useful for templating, replace sections of input with the output of a shell command or script
    trim          Trim whitespace on lines and ignore empty ones

为什么存在这个工具

我经常编写 CI 流水线,并处理字符串,尤其是模板,这总是非常痛苦。每个同事都有自己的问题解决风格,而当涉及到字符串转换时,任何非自己编写的解决方案都是难以维护的。这主要是因为完成 shell-string 所做任务的方式有数千种,但这个 CLI 使它们变得 非常直观 且易于理解。最重要的是,我讨厌反复寻找文件模板的解决方案。我编写 shell-string 来避免再次思考最佳文件模板方式。总是这样,就这样。

为什么 shell-string 适合文件模板?

因为实际上你没有任何限制。你需要插入一些环境变量?简单,只需将 {{ echo $MY_VAR }} 写入模板中即可。需要复杂逻辑吗?你可以写 {{ console.log(crazyStuff()) }},然后使用 --shell=node 执行。你想要在模板文件中使用 haskell 吗?使用 --shell=ghci

《字符串模板》命令非常强大,因为它本身不进行繁重的操作,就像很多替代方案那样。相反,它依赖于使用你在终端中可以使用的所有工具。你可以指定命令是如何被解释的,无论是通过 ghcipython 还是 sh(默认)。

使用《字符串模板》,你甚至可以为自己设置文件模板的工作流程。这在持续集成(CI)或配置新系统时特别有用。

这看起来是什么样子呢?

kind: Deployment
metadata:
  name: {{ echo $GIT_REPO_NAME }}-deployment
  labels:
    deployed: "{{date}}"
    app: {{ echo $GIT_REPO_NAME }}
spec:
  replicas: {{jq .replicas < config.json}}
...
        image: {{node getImageName.js}}
...

默认情况下,使用 sh 来解释 {} 之间的命令,如果你不喜欢这些分隔符,那也行。你可以选择你喜欢的任何分隔符。你应该这么做。

我如何使用文档作为模板呢?

假设你有一个文档 deployment.template.yaml,并且你想生成一个名为 deployment.yaml 的文件,这很简单。打开终端并输入

cat deployment.template.yaml | string template > deployment.yaml

这意味着

  • cat deployment.template.yaml:打印文件 deployment.template.yaml
  • | string template:这里的 | 表示“不要在终端中打印此内容,将其管道传输到另一个程序”,而这个程序是 stringtemplate 模式下。
  • > deployment.yaml:将输出写入一个名为 deployment.yaml 的文件。如果文件已存在,则先清空。

安装

如果你的机器上已安装 cargo,执行

cargo install shell-string

要验证安装是否成功,请输入 string --version。如果安装成功,你应该会看到适当的版本号。


如果你想要最新版本,请使用以下命令在本地上检出此存储库

git clone https://github.com/nilsmartel/string

并使用以下命令构建和安装代码

cd string   # go into the repository
cargo install --path . --force      # use force in case the binary is alread installed

依赖项

~4.5MB
~79K SLoC