2013-10-26 3 views
1

Я хотел бы преобразовать строку из верхнего в нижний регистр. Я знаю, что существуют разные способы решения этой проблемы, но я хотел бы понять, почему эта команда не работает:В верхнем и нижнем регистре с символами Sed и символов

echo "aa" | sed 's/'[:upper:]'/'[:lower:]'/g' 

Это неправильный способ использовать классы персонажей?

ответ

1

В sed, команда y используется для отображения наборов символов:

sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' 

Это требует буквального список символов, а не классы символов.

+2

Но не представляется возможным использовать [: upper:] или [: lower:], чтобы получить более элегантное решение? – NCL

+5

Не так далеко, насколько я знаю. Команда 'y' работает только с символами, а не с классами. Вы даже не можете писать 'y/A-Z/a-z /'. – Barmar

5

из нижнего регистра в верхний регистр, вы можете использовать

echo "aW123bR" | sed -r 's/[a-z]+/\U&/g' 

tr команды является интересной альтернативой

echo "aW123bR" | tr '[:lower:]' '[:upper:]' 
1

Другим возможным решением с простака:

[ ~]$ echo "HELLO"|awk '{print tolower($0)}' 
hello 
Смежные вопросы