我想使用bash将第一个字符转换为dash( - )之后的资本和字符。
我可以使用 - ,
将单个元素拆分echo "string" | tr [:lower:] [:upper:]
加入所有人,但这似乎没有影响。有什么简单的方法可以使用单行来照顾这一点?
输入字符串:
JASON-CONRAD-983636
预期字符串:
Jason-Conrad-983636
我建议对此使用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
在没有任何第三方utils
的纯bash
(v4 )中 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
并打印结果
( IFS=- ; printf '%sn' "${final[*]}" ; )
这可能对您有用(gnu sed):
sed 's/.*/L&/;s/b./u&/g' file
小写的一切。大写单词的第一个字符。
替代:
sed -E 's/b(.)((B.)*)/u1L2/g' file
您可以尝试以下(如果您可以使用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="-"
尽管聚会大部分结束了,请让我加入perl
解决方案:
perl -pe 's/(^|-)([^-]+)/$1 . ucfirst lc $2/ge' <<<"JASON-CONRAD-983636"
使用ucfirst
函数可能很狡猾:)