string - 如何将fish shell中的字符串大写?

标签 string shell fish capitalization capitalize

我收到以下文本:

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

我想要大写,即每个单词的第一个字母大写。

预期结果

Lorem Ipsum Dolor Sit Amet, Consectetur Adipisicing Elit.

相当于 Bash

使用 bash,我使用了参数扩展:

function to-lower() { echo "$@" |tr '[:upper:]' '[:lower:]' ; }

function capitalize() {
    input="$(to-lower "$@")"
    for i in $input; do
        cap=$(echo -n "${i:0:1}" | tr "[:lower:]" "[:upper:]")
        echo -n "${cap}${i:1} "
    done
    echo
}

问题

我如何以 fish 的方式做到这一点?

最佳答案

Fish 目前没有任何工具可以执行此操作(在某个版本中),因此假设您有 GNU sed,您可以执行此操作:

function capitalize
    echo $argv | sed 's/[^ _-]*/\u&/g'
end

还有各种其他工具,您也可以使用例如python 或通过从fish 调用bash,要点是无法提取子字符串或用fish 内置函数替换字符。

在下一个 Fish 版本中,您将能够使用 string sub -l 1 $i 提取第一个字符。

关于string - 如何将fish shell中的字符串大写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34207402/

相关文章:

java - 缩短字符之间的字符串,直到达到最大字符长度

shell - zsh 在执行搜索和补全时插入额外的空格

bash - xargs 命令在 'LINE_MAX' 断言上失败

shell - 带有 argparse 的 fish 函数的命名参数

java - 再次在字符串追加 vs concat vs +

java - 在文本文件中,我只需要打印最后一个字符是可能的

ubuntu - 如何更换旧 fish 安装

shell - Fish 相当于 bash $(command) 符号

c++ - 如何将 std::string 长度转换为十六进制然后再转换回字符串?

python - 终端中的嵌套 For 循环