我有一个命令用于将句子转换为标题案例。必须从文本文件中复制此命令,然后将其粘贴到终端中,然后粘贴我想要转换的句子是低效的。命令是:
echo "my text" | sed 's/.*/\L&/; s/[a-z]*/\u&/g'
如何将其转换为脚本,以便我可以从终端调用以下内容:
TitleCaseConverter "my text"
是否可以创建这样的脚本?是否可以从任何文件夹位置使其工作?
答案 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