Как я могу преобразовать строки в угловых скобках в верхний регистр в MacOS?

Я работаю в MacOS 10.12 и у меня есть 100 файлов, таких как этот:

My file <structure_is> like this <and_maybe_like> this,
but not quite like this.
But there might be <stuff> like this, too.

Я пытался преобразовать все элементы в <> в верхний регистр, чтобы файл выглядел следующим образом:

My file <STRUCTURE_IS> like this <AND_MAYBE_LIKE> this,
but not quite like this.
But there might be <STUFF> like this, too.

Я пытался с помощью:

find . -name "\*" | xargs sed 's/\<([a-z_][^>]*)\>/\U&/g'

Я также попробовал использовать gsed (home-brew):

find . -name "\*" | xargs gsed 's/\<([a-z_][^>]*)\>/\U&/g'

Но все, что я получаю - это содержимое самих файлов на стандартный вывод.

Как мне это сделать?

С наилучшими пожеланиями!

2 ответа

Это работает в Linux: sed 's/<[^>]*>/\U&/g' file

Я не знаю, если \U только GNU sed.

Альтернативно, Perl:

perl -pe 's/<.*?>/\U$&/g' file

< в регулярном выражении является буквальным < в то время как \< в GNU sed, по крайней мере, есть escape-последовательность слова-разделителя. Так что просто поменяйте \<в < а также \> в > и ваш gsed Сценарий будет работать нормально.

Никогда не избегайте персонажа, если вы не ЗНАЕТЕ, что делаете. Если вы хотите буквальный символ c и не знаю, если вам нужно избежать этого или нет, то вы безопаснее, используя [c] чем \c потому что, по крайней мере, первый не может превратить его в метасимвол регулярного выражения.

Другие вопросы по тегам