【问题标题】:SED expression for turning Yeseva+One into --font-yeseva-one: "Yeseva One";将 Yeseva+One 转换为 --font-yeseva-one 的 SED 表达式:“Yeseva One”;
【发布时间】:2017-08-22 11:35:23
【问题描述】:

我有一系列这样的字体值(命令分隔一行):

Yeseva+One, Yrsa, ...

我正在寻找一个 SED(或其他 bash 工具表达式)来将每个值转换为这样的行语句:

--font-yeseva-one: "Yeseva One";
--font-yrsa: "Yrsa"; 

想法?

更新

只是想说感谢您在这方面的所有大力帮助,如果有人需要 google 字体作为 CSS 变量/属性,它们都可以在此处获得(MIT 许可证): 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

【问题讨论】:

  • 除了+Yeseva+One 中,还有哪些值可以作为分隔符出现?

标签: css bash sed grep google-font-api


【解决方案1】:
#!/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";

【讨论】:

  • 谢谢 - 差不多了......我喜欢它的简单顺便说一句 - 很容易理解 - 但是一些输出看起来像这样:--font--abhaya+libre: Abhaya+Libre。 .. 它需要看起来像这样 --font--abhaya-libre: "Abhaya Libre"
  • 嘿@Ole,当我将“Abhaya+Libre”添加到输入参数列表时,我认为相同的代码对我有用。如果我遗漏了什么,请告诉我。
  • 现在完美运行 - 谢谢!!
【解决方案2】:

使用纯 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";

【讨论】:

  • 感谢 George - 这真的帮助我加快了编写脚本的速度!
【解决方案3】:

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&lt;=NF;i++) - 遍历所有字段

k=gensub("+","-","g",$i); - 将所有+ 替换为-(用于字体键属性)

v=gensub("+"," ","g",$i); - 将所有+ 替换为(用于字体值)

【讨论】:

  • 嗨 - 我把上面的内容放在一个脚本中,我得到了以下内容: ./script2.sh: 7: ./script2.sh: Syntax error: redirection unexpected ... 有什么我吗?我做错了吗?
  • @Ole,在命令行上测试一下。传递输入的另一种方式是echo "Yeseva+One, Yrsa, Courier+New" | awk -F", " '{for(i=1;i&lt;=NF;i++){k=gensub("+","-",1,$i); v=gensub("+"," ",1,$i);printf "--font-%s: \"%s\";\n",tolower(k),v;}}'
猜你喜欢
  • 2017-08-22
  • 2014-05-08
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 2018-07-02
  • 2017-06-12
  • 1970-01-01
  • 2011-06-01
相关资源
最近更新 更多