【问题标题】:Making a script that transforms sentences to title case?制作一个将句子转换为标题大小写的脚本?
【发布时间】:2017-08-13 00:33:01
【问题描述】:

我有一个命令用于将句子转换为标题大小写。必须将此命令从文本文件中复制出来,然后将其粘贴到终端中,然后再粘贴到我要转换的句子中,这是低效的。命令是:

echo "my text" | sed 's/.*/\L&/; s/[a-z]*/\u&/g'

如何将其转换为脚本,以便我可以从终端调用类似以下内容:

TitleCaseConverter "my text"

是否可以创建这样的脚本?是否可以从任何文件夹位置使其工作?

【问题讨论】:

    标签: bash shell terminal command


    【解决方案1】:

    在当前的 shell 中将它包装到 .bashrc 或 .bash_profile 和 source 中的函数中如何?

    TitleCaseConverter() {
        sed 's/.*/\L&/; s/[a-z]*/\u&/g' <<<"$1"    
    }
    

    或)如果您希望它完美地避免输入参数中出现任何类型的尾随新行,请执行

    printf "%s" "$1" | sed 's/.*/\L&/; s/[a-z]*/\u&/g'
    

    现在您可以在命令行中source 文件一次以使该功能可用,这样做

    source ~/.bash_profile
    

    现在可以直接在命令行中使用了

    str="my text"
    newstr="$(TitleCaseConverter "$str")"
    printf "%s\n" "$newstr"
    My Text
    

    还有你的问题,

    如何将其转换为脚本,以便我可以从终端调用类似以下内容

    将函数添加到启动文件之一即可解决此问题,建议将其添加到.bash_profile 更多。

    TitleCaseConverter "this is stackoverflow"
    This Is Stackoverflow
    

    更新:

    OP 试图使用函数调用返回的名称创建一个目录,如下所示

    mkdir "$(TitleCaseConverter "this is stackoverflow")"
    

    这里的关键再次是双引号命令替换以避免shell分词。

    【讨论】:

    • 太棒了!现在有没有办法将它与 mkdir 一起使用?我尝试使用:mkdir TitleCaseConverter“这是stackoverflow”。但它创建了两个目录,一个用于 TitleCaseConverter,一个用于“这是 stackoverflow”。
    • 太好了,最后一件事,有没有办法让它跳过像'a'、'the'、'is'、'of'等这样的词。所以它只对其他词进行标题?如果这需要更多的复杂性,请不要担心,我将使用您上面给出的脚本,因为这是一个非常小的问题!
    • @eurocoder:是的,这远远超出了当前问题的范围。如果您真的想获得正确的答案,请将其发布为新答案!谢谢!
    【解决方案2】:

    由于bash 的参数扩展 包括case modification,因此不需要sed。只是一个简短的功能:

     tc() { set ${*,,} ; echo ${*^} ; }
    

    测试(不要使用引号,因为标题通常不超过一个句子,所以没关系):

    tc FOO bar
    

    输出:

    Foo Bar
    

    避免大写某些连词、冠词等的花哨版本:

    ftc() { set ${*,,} ; set ${*^} ; echo -n "$1 " ; shift 1 ; \
            for f in ${*} ; do \
                case $f in  A|The|Is|Of|And|Or|But|About|To|In|By) \
                        echo -n "${f,,} " ;; \
                     *) echo -n "$f " ;; \
                esac ; \
            done ; echo ; }
    

    测试:

    ftc the last of the mohicans
    

    输出:

    The Last of the Mohicans 
    

    【讨论】:

    • 这作为一个函数非常有用,但是当我试图将它转换为一个独立的 shebang 脚本时,我似乎在 bat 的 ${,,} 语法上失败了,并带有“bad替换”错误。感觉我遗漏了一些明显的东西。
    • @lbutlr,错误的 shebang,bash 替换代码不能作为 POSIX shell 脚本工作。假设脚本的名称是 ftc.sh,那么:sed -i '1s#/sh$#/bash#' ftc.sh 应该修复它...
    • 如何在管道中使用它?即:pbpaste | tc
    【解决方案3】:

    我没有评论权限,但对 ManUnitedBloke 的回答略有改进,这将处理“不要”和“谁”等收缩。

    echo "my text" | sed 's/.*/\L&amp;/; s/[a-z']*/\u&amp;/g'

    【讨论】:

      猜你喜欢
      • 2011-10-29
      • 2011-11-05
      • 2022-05-24
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      相关资源
      最近更新 更多