如何在MacOS上将尖括号中的字符串转换为大写?

时间:2017-08-25 15:02:25

标签: macos sed substitution gnu-sed

我在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.

我一直在尝试转换&lt;&gt;中的所有项目大写以查看文件如下所示:

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'

但我得到的只是文件本身的内容到stdout。

我该怎么做?

最诚挚的问候!

2 个答案:

答案 0 :(得分:1)

这适用于Linux:sed 's/<[^>]*>/\U&/g' file

我不知道\U是否只是GNU sed。

或者,perl:

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

答案 1 :(得分:0)

正则表达式中的

<是文字<而GNU中的\<至少是单词分隔符转义序列。因此,只需将您的\<更改为<,将\>更改为>,您的gsed脚本就可以正常使用。

除非你知道自己在做什么,否则永远不要逃避角色。如果你想要一个文字字符c并且不知道你是否需要逃避它,那么你使用[c]而不是\c更安全,因为至少前者不能把它变成一个正则表达式元字符。