Случай змеи для нижнего регистра верблюда с регулярным выражением и sed - PullRequest
2 голосов
/ 07 августа 2020

Я пытаюсь найти правильное регулярное выражение, которое соответствует шаблону "some_text" .local для sed

("\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 для поиска и замены

1 Ответ

1 голос
/ 07 августа 2020

Используйте для этого sed l oop:

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

    s/"([^"]+)"\.local/L10n.\1/g
' file.swift

Объяснение:

  • Первый s заменяет только один _seq на Seq за раз. Таким образом, команда повторяется до тех пор, пока ничто не будет соответствовать шаблону _([^"]+"\.local) (определение .local в случае змеи). t loop означает «от Go до loop, если последняя команда s была успешной.

  • Вторая команда 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' {} +
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...