от верхнего до нижнего регистра с использованием sed - PullRequest
21 голосов
/ 27 марта 2009

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

getFoo_Bar

до:

getFoo_bar

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

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

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

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

но я застрял: я хочу написать "\ 2 строчные буквы", как мне это сделать?

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

Ответы [ 8 ]

33 голосов
/ 04 мая 2010

Чтобы изменить 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 не была изменена.

25 голосов
/ 27 марта 2009
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
7 голосов
/ 27 марта 2009

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

echo getFoo_Bar | sed 's/_\(.\)/_\L\1/'
6 голосов
/ 19 апреля 2011

Самое короткое, что я могу придумать:

echo getFoo_Bar | sed 's/_./\L&/'
1 голос
/ 27 марта 2009

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

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

Здесь уловка \ l.

sed не выполняет прописные / строчные буквы в соответствующих группах.

0 голосов
/ 26 октября 2013

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

echo getFoo_Bar | gawk -F_ '{print tolower($2)}'
0 голосов
/ 13 июня 2012
echo getFoo_Bar | sed 's/[Bb]/\L&/g'
0 голосов
/ 27 марта 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...