制作一个将句子转换为标题案例的脚本?

时间:2017-03-21 11:14:21

标签: bash shell terminal command

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

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

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

TitleCaseConverter "my text"

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

2 个答案:

答案 0 :(得分:6)

如何将它包装到.bashrc.bash_profile中的函数以及source当前shell中的函数

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进行单词拆分。

答案 1 :(得分:1)

由于bash参数展开包含asdf,因此不需要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) echo -n "${f,,} " ;; \
                                                   *) echo -n "$f " ;; \
            esac ; \
        done ; echo ; }

测试:

ftc the last of the mohicans

输出:

The Last of the Mohicans