【问题标题】:convert text to snake case to camelCase in MAC OS High sierra在 MAC OS High sierra 中将文本转换为蛇形大小写为驼峰大小写
【发布时间】:2018-10-17 19:55:04
【问题描述】:

我想将 2+ 个单词转换为驼峰式大小写。我尝试了在线 ubuntu 版本,它可以工作。但不是在 mac os 上。

my amazing-long_variable -> myAmazingLongVariable

echo "my amazing-long_variable" | sed -E 's/[ |_|-]([a-z])/\U\1/gi' | sed -E 's/^([A-Z])/\l\1/'

我的输出:

sed: 1: "s/[ |_|-]([a-z])/\U\1/gi": bad flag in substitute command: 'i'

第二次尝试:

echo "my amazing-long_variable" | sed -E 's/[ |_|-]([a-z])/\U\1/g' | sed -E 's/^([A-Z])/\l\1/'

输出:

myUamazingUlongU 变量

谢谢

【问题讨论】:

  • 另一个想法 - 安装自制软件,以便您可以访问 GNU 工具

标签: macos sed operating-system


【解决方案1】:

\U\l 是 GNU sed 扩展。 Perl 开箱即用:

echo "my amazing-long_variable" | perl -nE 'say lcfirst join "", map {ucfirst lc} split /[^[:alnum:]]+/'

你从右到左读这个

  • split /[^[:alnum:]]+/ 将默认变量 $_(即当前行)拆分为任意非字母数字字符序列,生成列表“my”、“amazing”、“long”、“variable”
  • map {ucfirst lc} 将代码ucfirst lc 依次应用于每个单词。
    • 您可能猜到了,lc 将单词小写,然后ucfirst 将第一个字符大写
    • 这会导致列表“My”、“Amazing”、“Long”、“Variable”
  • join "", 使用空字符串连接单词:“MyAmazingLongVariable”
  • lcfirst 第一个字符小写:“myAmazingLongVariable”

perl 选项-n 循环输入文件和/或标准输入,将每一行放入“默认变量”$_-l 负责处理打印命令的行尾。

【讨论】:

  • 这真是个好建议。我怎样才能改变它,以便它找到所有具有“我的惊人的long_variable”的文件,然后我用你的一个衬里将它替换为camelCase。提前致谢
  • 我有文件 test.txt 如下内容:some junk data-selenium='hello world' some junk data-selenium='hello-world' some junk data-selenium='hello' 我想将所有hello world hello-world hello_world 替换为helloWorld
  • 将输入数据放在可以正确格式化的问题中
【解决方案2】:

我通过下面的代码实现了这一点。不是一个很好的解决方案,但它有效;)

find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2'/g"
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2\u\$3'/g"
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2\u\$3\u\$4'/g"
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2\u\$3\u\$4\u\$5'/g"
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2\u\$3\u\$4\u\$5\u\$6'/g"

【讨论】:

    猜你喜欢
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2014-10-30
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 2019-06-12
    相关资源
    最近更新 更多