sed удалите все заглавные буквы - PullRequest
3 голосов
/ 08 декабря 2011

Я пытаюсь удалить все вхождения заглавных букв только в следующей строке с помощью команды sed, приведенной ниже, но выводится только то, что я ввожу - как правильно подставить подстановку?

echo "Dog boy Did Good" | sed 's/\([A-Z]\+\)/\1/g'

Ответы [ 4 ]

7 голосов
/ 08 декабря 2011
echo "Dog boy Did Good" | sed 's/[A-Z]//g'
2 голосов
/ 08 декабря 2011
echo "Dog boy Did Good" | sed 's/[A-Z]//g'
og boy id ood

Вы заменяете что-то (UPPERCASE) ничем, и вам не нужно группировать это, потому что вы не используете это позже, и вам не нужно +, потому что g в конце выполняетзамена глобально.

1 голос
/ 08 декабря 2011

Ответы, которые у вас есть сейчас, хорошие, при условии, что все ваши заглавные буквы представлены через [A-Z], как это принято в обычном американском английском, но не проходит тест Турции , который имеет несколько вариантов письмо i.

Лучше было бы использовать механизм [[:upper:]], который будет учитывать текущее значение locale(7):

$ sed 's/[[:upper:]]//g' /etc/motd
elcome to buntu 11.04 (/inux 2.6.38-12-generic x86_64)
...

Еще одна альтернатива, которую я хочу упомянуть; команда tr(1) может легко удалять:

$ tr -d [[:upper:]] < /etc/motd 
elcome to buntu 11.04 (/inux 2.6.38-12-generic x86_64)
...
1 голос
/ 08 декабря 2011

Если вы хотите полностью удалить их, не используйте \ 1 во второй половине выражения sed, поскольку это добавляет первое совпадение (которое вы пытаетесь заменить)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...