RegEx搜索&替换& casefold,但仅限于某些行

时间:2012-08-07 23:03:58

标签: xml regex sed

我有一个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就可以了,但事实并非如此。我做错了什么?

1 个答案:

答案 0 :(得分:0)

  1. 作为一般规则:不要使用正则表达式来解析像XML这样的非常规语言。

  2. \U是GNU sed的一项功能,默认情况下在Mac OS X上不可用。您可以gnu-sedgsedhomebrew安装它为-i

  3. 如果您不想依赖外部工具,可以像这样使用perl(使用{{1}}文件就地更改):

    perl -i -pe's /(?&lt; =)(。)_ / \ U $ 1 /'file.plist