求助 在 Linux shell 里的替换问题

2021-01-28 16:52:30 +08:00
 wuxi889

现在有个需要需要将例如 AdadaBdaC 参数值替换成 adada-bda-c 这种骚操作怎么处理,大写包括 A-Z

2118 次点击
所在节点    Linux
23 条回复
ysc3839
2021-01-28 16:58:30 +08:00
我只知道 Python 有个 inflection 库可以实现
https://inflection.readthedocs.io/en/latest/#inflection.parameterize
xupefei
2021-01-28 17:02:24 +08:00
用正则表达式把大写字母替换成 -小写字母,然后 trim 掉-
lululau
2021-01-28 17:05:17 +08:00
echo AdadaBdaC | ruby -ne 'puts $_.scan(/[A-Z][a-z]*/).map(&:downcase)*"-"'
jdhao
2021-01-28 17:07:07 +08:00
正则替换?
wuxi889
2021-01-28 17:07:08 +08:00
@lululau 容器里跑只能用基本命令,大佬你这条用不上了
wuxi889
2021-01-28 17:09:22 +08:00
@jdhao @xupefei 原谅我做一次伸手党 [手动捂脸]
bootvue
2021-01-28 17:11:18 +08:00
干掉这个需求
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
aheadlead
2021-01-28 17:18:10 +08:00
shell 真是一言难尽… 给楼主一个方案吧。。。

a=$(echo "AdadaBdaC" | sed -e 's/\([A-Z]\)/-\L\1/g')
echo ${a#-}
aheadlead
2021-01-28 17:19:36 +08:00
@xupefei #2 就是 2L 的方案
zeroDev
2021-01-28 17:20:22 +08:00
用 sed,如果要换的多,建议写个脚本文件
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'
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'
zpfhbyx
2021-01-28 17:30:24 +08:00
echo 'AdadaBdaC' | sed 's/[A-Z][a-z]*/\L&-/g' | sed 's/.$//' centos 下可以,mac 下不行
wuxi889
2021-01-28 17:40:09 +08:00
@aheadlead @maichael @zpfhbyx 大佬们在上,受小弟一拜,提前百年。我去试试
libook
2021-01-28 17:41:36 +08:00
@zpfhbyx Linux 下的 sed 是 GNU sed,MacOS 下的 sed 是 BSD sed,不光 sed,很多指令两者都有区别。
你要想在 MacOS 下用 GNU 指令就要装 Coreutils,你可以去网上搜如何用 brew 装,以及如何设为默认指令。
zpfhbyx
2021-01-28 17:43:20 +08:00
@libook 感谢,我去搜搜,一般都是 linux 下写 shell - - 没细看过
aheadlead
2021-01-28 17:50:15 +08:00
@zpfhbyx brew install gsed
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)}'
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]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/749294

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX