现在有个需要需要将例如 AdadaBdaC 参数值替换成 adada-bda-c 这种骚操作怎么处理,大写包括 A-Z
![]() | 1 ysc3839 2021-01-28 16:58:30 +08:00 via Android 我只知道 Python 有个 inflection 库可以实现 https://inflection.readthedocs.io/en/latest/#inflection.parameterize |
![]() | 2 xupefei 2021-01-28 17:02:24 +08:00 via iPhone 用正则表达式把大写字母替换成 -小写字母,然后 trim 掉- |
![]() | 3 lululau 2021-01-28 17:05:17 +08:00 echo AdadaBdaC | ruby -ne 'puts $_.scan(/[A-Z][a-z]*/).map(&:downcase)*"-"' |
![]() | 4 jdhao 2021-01-28 17:07:07 +08:00 via Android 正则替换? |
干掉这个需求 |
8 RudyS 2021-01-28 17:17:53 +08:00 sed -i 's/A/a/g' file sed -i 's/B/-b/g' file sed -i 's/C/-c/g' file |
![]() | 9 aheadlead 2021-01-28 17:18:10 +08:00 shell 真是一言难尽… 给楼主一个方案吧。。。 a=$(echo "AdadaBdaC" | sed -e 's/\([A-Z]\)/-\L\1/g') echo ${a#-} |
![]() | 11 zeroDev 2021-01-28 17:20:22 +08:00 via Android 用 sed,如果要换的多,建议写个脚本文件 |
![]() | 12 maichael 2021-01-28 17:24:11 +08:00 echo AdadaBdaC | sed -E 's/([A-Z])/_\1/g' | sed -E 's/^_//g' | tr 'A-Z' 'a-z' |
![]() | 13 maichael 2021-01-28 17:24:48 +08:00 @maichael #12 echo AdadaBdaC | sed -E 's/([A-Z])/-\1/g' | sed -E 's/^-//g' | tr 'A-Z' 'a-z' |
![]() | 14 justseemore 2021-01-28 17:30:24 +08:00 |
![]() | 16 libook 2021-01-28 17:41:36 +08:00 @zpfhbyx Linux 下的 sed 是 GNU sed,MacOS 下的 sed 是 BSD sed,不光 sed,很多指令两者都有区别。 你要想在 MacOS 下用 GNU 指令就要装 Coreutils,你可以去网上搜如何用 brew 装,以及如何设为默认指令。 |
![]() | 17 justseemore 2021-01-28 17:43:20 +08:00 @libook 感谢,我去搜搜,一般都是 linux 下写 shell - - 没细看过 |
19 zlowly 2021-01-28 17:50:19 +08:00 ![]() stackoverflow 上有 How to convert a string to lower case in Bash?比较全。抄几条 POSIX standard echo "AdadaBdaC" | tr '[:upper:]' '[:lower:]' AWK echo "AdadaBdaC" | awk '{print tolower($0)}' |
![]() | 20 atomduanvex 2021-01-28 18:16:22 +08:00 echo AdadaBdaC | sed -E 's/([A-Z])/-\1/g' | sed 's/^-//g' | tr [A-Z] [a-z] |
![]() | 21 ideno 2021-01-28 19:29:20 +08:00 echo 'AdadaBdaC' | awk '{first=tolower(substr($0, 1, 5)); secOnd=tolower(substr($0, 6, 3)); third=tolower(substr($0, 9)); printf("%s-%s-%s", first, second, third);}' |
![]() | 22 ideno 2021-01-28 19:31:06 +08:00 echo 'AdadaBdaC' | awk '{str=tolower($0);printf("%s-%s-%s", substr(str, 1, 5), substr(str, 6, 3), substr(str, 9));}' |
![]() | 23 wuxi889 OP |