используя sed для изменения отдельных частей шаблона выражения - PullRequest
2 голосов
/ 16 октября 2019

Как мне изменить все строки в файле, которые имеют шаблон: строчные последовательности букв, разделенные одним подчеркиванием, и после последней последовательности - круглые скобки. Мне нужно изменить его на последовательности, которые не разделяются подчеркиванием, а любая буква после подчеркивания заменяется на заглавную?

Например: this_is_my_task() изменить на thisIsMyTask(). Мне нужно сделать это с помощью sed.

Но программа не должна изменять строку как: this_is____my_task(), потому что в строке 4 подчеркивания.

Программа не должна изменять эти строки: ___this_is_my_task() или, потому что в начале первой строки есть подчеркивания.

Я пробовал это: sed -r 's/([a-z]+)_([a-z]+)\(\)/\1\u\2()/' file.c, но это изменит его только на this_is_myTask()

1 Ответ

0 голосов
/ 16 октября 2019

Наилучшим подходом является использование Perl:

perl -pe 's{\b[a-z]+(?:_[a-z]+)+\(\)}{$&=~s/_([a-z])/\u$1/gr}ge' file.c

См. онлайн демо и первое демо регулярных выражений , оно соответствует

  • \b - граница слова
  • [a-z]+ - 1+ строчных букв ASCII
  • (?:_[a-z]+)+ - одно или несколько вхождений _ и 1+ строчных букв ASCII
  • \(\) - подстрока ().

После совпадения значение совпадения ($&) заменяется шаблоном _([a-z]) (_, а затемстрочная буква в группе 1), которая заменяется заглавной буквой (\u$1).

С sed вы можете использовать

sed -E ':a; s/\b([a-z][A-Za-z]*)_([a-z]+(_[a-z]+)*\(\))/\1\u\2/; ta' file.c

или

sed -E ':a; s/\b([[:lower:]][[:alpha:]]*)_([[:lower:]]+(_[[:lower:]]+)*\(\))/\1\u\2/; ta' file.c

См. онлайн-демо

Подробнее

  • :a - устанавливает метку с именем a
  • s/\b([a-z][A-Za-z]*)_([a-z]+(_[a-z]+)*\(\))/\1\u\2/ - заменяет

    • \b - граница слова
    • ([a-z][A-Za-z]*) - Группа 1: строчная буква, за которой следуют 0+ букв
    • _ - символ подчеркивания
    • ([a-z]+(_[a-z]+)*\(\)) - группа 2:
      • [a-z]+ -1+ строчные буквы, за которыми следуют
      • (_[a-z]+)* - 0 или более вхождений символов подчеркивания, а затем 1+ строчные буквы, за которыми следует
      • () - () подстрока

    со значениями группы 1 и группы 2, когда первый символ в группе 2 установлен в верхнее значение

  • ta - при успешной замене происходит переход кметка a позиция.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...