Как я могу преобразовать строки в угловых скобках в верхний регистр в 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
потому что, по крайней мере, первый не может превратить его в метасимвол регулярного выражения.