将 Yeseva+One 转换为 --font-yeseva-one 的 SED 表达式:"Yeseva One";
SED expression for turning Yeseva+One into --font-yeseva-one: "Yeseva One";
我有一系列这样的字体值(命令分隔一行):
Yeseva+One, Yrsa, ...
我正在寻找一个 SED(或其他 bash 工具表达式)来将每个值转换成这样的行语句:
--font-yeseva-one: "Yeseva One";
--font-yrsa: "Yrsa";
想法?
更新
只是想感谢您提供的所有帮助,如果有人需要 google 字体作为 CSS 变量/属性,它们都可以在这里获得(麻省理工学院许可证):
https://github.com/superfly-css/superfly-css-variables-fonts/blob/master/src/main/css/index.css
我还将在此处提供使用 google 字体的实用程序:
https://github.com/superfly-css/superfly-css-utilities-fonts
awk 方法:
s="Yeseva+One, Yrsa, Courier+New, Alegreya+Sans+SC"
awk -F", " '{for(i=1;i<=NF;i++){k=gensub("+","-","g",$i);
v=gensub("+"," ","g",$i);printf "--font-%s: \"%s\";\n",tolower(k),v;}}' <<< $s
输出:
--font-yeseva-one: "Yeseva One";
--font-yrsa: "Yrsa";
--font-courier-new: "Courier New";
--font-alegreya-sans-sc: "Alegreya Sans SC";
-F", "
- 字段分隔符
(i=1;i<=NF;i++)
- 遍历所有字段
k=gensub("+","-","g",$i);
- 将所有 +
替换为 -
(用于字体键属性)
v=gensub("+"," ","g",$i);
- 将所有 +
替换为
(对于字体值)
#!/bin/sh
variable="Abc, Def+Hola, Ghij"
IFS="[, ]"
for i in $variable
do
a=`echo "$i" | sed 's/\+/ /g'`
i=`echo "$i" | tr '[:upper:]' '[:lower:]' | sed 's/\+/\-/g'`
echo "--font-$i: \"$a\";"
done
请检查,我已经在我的机器上检查过了,它工作正常!
输出:
--font-abc: "Abc";
--font-def-hola: "Def Hola";
--font-ghij: "Ghij";
与纯 Bash :
IFS="[, ]" read -r -a list <<<"Yeseva+One, Yrsa" #Convert values to array
for k in "${list[@]}";do
k2="${k,,}" #The bash way to convert everything from upper to lower
printf -- '--font-%s:\"%s\";\n' "${k2//+/-}" "${k//+/ }" #bash way to replace strings
done
#Output
--font-yeseva-one:"Yeseva One";
--font-yrsa:"Yrsa";
我有一系列这样的字体值(命令分隔一行):
Yeseva+One, Yrsa, ...
我正在寻找一个 SED(或其他 bash 工具表达式)来将每个值转换成这样的行语句:
--font-yeseva-one: "Yeseva One";
--font-yrsa: "Yrsa";
想法?
更新
只是想感谢您提供的所有帮助,如果有人需要 google 字体作为 CSS 变量/属性,它们都可以在这里获得(麻省理工学院许可证): https://github.com/superfly-css/superfly-css-variables-fonts/blob/master/src/main/css/index.css
我还将在此处提供使用 google 字体的实用程序: https://github.com/superfly-css/superfly-css-utilities-fonts
awk 方法:
s="Yeseva+One, Yrsa, Courier+New, Alegreya+Sans+SC"
awk -F", " '{for(i=1;i<=NF;i++){k=gensub("+","-","g",$i);
v=gensub("+"," ","g",$i);printf "--font-%s: \"%s\";\n",tolower(k),v;}}' <<< $s
输出:
--font-yeseva-one: "Yeseva One";
--font-yrsa: "Yrsa";
--font-courier-new: "Courier New";
--font-alegreya-sans-sc: "Alegreya Sans SC";
-F", "
- 字段分隔符
(i=1;i<=NF;i++)
- 遍历所有字段
k=gensub("+","-","g",$i);
- 将所有 +
替换为 -
(用于字体键属性)
v=gensub("+"," ","g",$i);
- 将所有 +
替换为 (对于字体值)
#!/bin/sh
variable="Abc, Def+Hola, Ghij"
IFS="[, ]"
for i in $variable
do
a=`echo "$i" | sed 's/\+/ /g'`
i=`echo "$i" | tr '[:upper:]' '[:lower:]' | sed 's/\+/\-/g'`
echo "--font-$i: \"$a\";"
done
请检查,我已经在我的机器上检查过了,它工作正常!
输出:
--font-abc: "Abc";
--font-def-hola: "Def Hola";
--font-ghij: "Ghij";
与纯 Bash :
IFS="[, ]" read -r -a list <<<"Yeseva+One, Yrsa" #Convert values to array
for k in "${list[@]}";do
k2="${k,,}" #The bash way to convert everything from upper to lower
printf -- '--font-%s:\"%s\";\n' "${k2//+/-}" "${k//+/ }" #bash way to replace strings
done
#Output
--font-yeseva-one:"Yeseva One";
--font-yrsa:"Yrsa";