【问题标题】:Snake case to lower camel case with regex and sed使用正则表达式和 sed 降低驼峰大小写的蛇形案例
【发布时间】:2020-08-07 17:01:38
【问题描述】:

我正在尝试为sed 找到与模式“some_text”.local 匹配的正确正则表达式

("\w*?"\.local) 负责查找 "...".local 匹配项, _(.)/\U\1 将查找所有下划线并将其替换为旁边的大写字母。 但我不知道如何将它们组合在一起,所以结果如下所示:

self.title = "statistics_title".local
self.title = "title".local

->

self.title = L10n.statisticsTitle
self.title = L10n.title

我使用find . -name "*.swift" -exec gsed -r -i 's/_(.)/\U\1/gi' {} + cmd 进行搜索替换

【问题讨论】:

    标签: regex sed


    【解决方案1】:

    为此使用sed 循环:

    sed -r '
        :loop
        s/_([^"]+"\.local)/\u\1/
        t loop
    
        s/"([^"]+)"\.local/L10n.\1/g
    ' file.swift
    

    解释:

    • 第一个s 一次只会将一个_seq 更改为Seq。因此,该命令重复执行,直到没有匹配模式_([^"]+"\.local)(蛇案例中的.local 定义)。 t loop 表示“如果最后一个 s 命令成功,则转到 loop

    • 第二个s 命令只是将所有"fooBar".local 变成L10n.fooBar

    您可以使用; 分隔符将所有内容放在一行中:

     find . -name "*.swift" -exec gsed -r -i ':loop; s/_([^"]+"\.local)/\u\1/g; t loop; s/"([^"]+)"\.local/L10n.\1/g' {} +
    

    【讨论】:

    • 不客气。您的问题已经很好地向我们解释了。对于第一个问题,这是非常不寻常的。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多