我有一个XML文件,其中的行如下:
<key>a_acute</key>
<string>a_acute.glif</string>
我需要把它变成这样的东西:
<key>Aacute</key>
<string>a_acute.glif</string>
即。用字母的大写替换一个字母后跟一个下划线(省略下划线),但仅限于以<key>
开头的行。这就是我到目前为止所做的:
sed '/^<key/s/\(.\)_/\1/'
这将删除<key>
行的下划线。但是我不能把它变成casefold。我认为在\U
之前加\1
就可以了,但事实并非如此。我做错了什么?
答案 0 :(得分:0)
作为一般规则:不要使用正则表达式来解析像XML这样的非常规语言。
\U
是GNU sed的一项功能,默认情况下在Mac OS X上不可用。您可以gnu-sed
从gsed
或homebrew安装它为-i
。
如果您不想依赖外部工具,可以像这样使用perl(使用{{1}}文件就地更改):
perl -i -pe's /(?&lt; =)(。)_ / \ U $ 1 /'file.plist