Подтвердить что ты не робот

От верхнего до нижнего регистра с помощью sed

Я хотел бы изменить следующие шаблоны:

getFoo_Bar

в

getFoo_Bar

(обратите внимание на нижний b)

Не знаю ни foo, ни bar, каков шаблон замены?

Я начал писать

sed 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1

но я застрял: я хочу написать "2 нижний регистр", как это сделать?

Может быть, sed не адаптирован?

4b9b3361

Ответ 1

s/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g

Тест:

$ echo 'getFoo_Bar' | sed -e 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g'
getFoo_bar

Ответ 2

Чтобы изменить getFoo_Bar на getFoo_bar с помощью sed:

echo "getFoo_Bar" | sed 's/^\(.\{7\}\)\(.\)\(.*\)$/\1\l\2\3/'

Верхние и строчные буквы обрабатываются:

  • \U Делает весь текст в правом верхнем регистре.
  • \U делает только первый символ в правом верхнем регистре.
  • \L Делает весь текст в правом нижнем регистре.
  • \L Делает только первый символ в правом нижнем регистре. (Запишите его строчную букву L)

Пример - это всего лишь один метод сопоставления шаблонов, основанный только на изменении одного фрагмента текста. Используя этот пример, getFoo_BAr преобразуется в getFoo_bAr, обратите внимание, что A не был изменен.

Ответ 3

Несколько короче:

echo getFoo_Bar | sed 's/_\(.\)/_\L\1/'

Ответ 4

Кратчайший я могу придумать:

echo getFoo_Bar | sed 's/_./\L&/'

Ответ 5

Вы можете использовать perl для этого:

perl -pe 's/(get[A-Z][A-Za-z0-9]*)_([A-Z])/\1_\l\2/'

Здесь\l - это трюк.

sed не выполняет верхний/нижний регистр в согласованных группах.

Ответ 7

Если вы хотите написать все в нижнем регистре сразу после подчеркивания, это будет работать для вас:

echo getFoo_Bar | gawk -F_ '{print tolower($2)}'

Ответ 8

echo ABCD | sed -r 's/(A)(B)(C)(D)/\1\l\2\3\4/'

echo ABCD | sed -r 's/(A)(B)(C)(D)/\1\L\2\E\3\4/'

Помогите:

\L  Turn the replacement to lowercase until a \U or \E is found
\l  Turn the next character to lowercase
\U  Turn the replacement to uppercase until a \L or \E is found
\u  Turn the next character to uppercase
\E  Stop case conversion started by \L or \U

смотреть больше

Ответ 9

echo getFoo_Bar | sed 's/[Bb]/\L&/g'