我想将第一个字符转换为大写字母,并且将dash(-)之后的字符需要使用bash转换为大写字母。
我可以使用-,
分割单个元素echo "string" | tr [:lower:] [:upper:]
并加入所有,但这似乎没有效果。有没有简单的方法可以使用单行来解决这个问题?
JASON-CONRAD-983636
Jason-Conrad-983636
答案 0 :(得分:2)
我建议为此使用Python:
python3 -c 'import sys; print("-".join(s.capitalize() for s in sys.stdin.read().split("-")))'
用法:
capitalize() {
python3 -c 'import sys; print("-".join(s.capitalize() for s in sys.stdin.read().split("-")))'
}
echo JASON-CONRAD-983636 | capitalize
输出:
Jason-Conrad-983636
答案 1 :(得分:2)
使用纯ALLOWED_HOSTS
(v4 +),没有任何第三方工具
bash
并打印结果
str=JASON-CONRAD-983636
IFS=- read -ra raw <<<"$str"
final=()
for str in "${raw[@]}"; do
first=${str:0:1}
rest=${str:1}
final+=( "${first^^}${rest,,}" )
done
答案 2 :(得分:1)
请尝试以下操作(如果您对awk
感到满意)。
var="JASON-CONRAD-983636"
echo "$var" | awk -F'-' '{for(i=1;i<=NF;i++){$i=substr($i,1,1) tolower(substr($i,2))}} 1' OFS="-"
答案 3 :(得分:1)
尽管聚会基本上结束了,请让我加入perl
解决方案:
perl -pe 's/(^|-)([^-]+)/$1 . ucfirst lc $2/ge' <<<"JASON-CONRAD-983636"
使用ucfirst
函数可能很狡猾:)
答案 4 :(得分:1)
这可能对您有用(GNU sed):
sed 's/.*/\L&/;s/\b./\u&/g' file
小写所有内容。单词的首字母大写。
替代:
sed -E 's/\b(.)((\B.)*)/\u\1\L\2/g' file