1

我有一个带有如下行的 XML 文件:

<key>a_acute</key>
<string>a_acute.glif</string>

我需要把它变成这样的东西:

<key>Aacute</key>
<string>a_acute.glif</string>

即用大写字母替换后跟下划线的字母(省略下划线),但仅在以 . 开头的行上<key>。这是我到目前为止所拥有的:

sed '/^<key/s/\(.\)_/\1/'

这将删除<key>行上的下划线。但我不能让它折叠起来。我认为\U在 the 之前放置 a\1可以解决问题,但事实并非如此。我究竟做错了什么?

4

1 回答 1

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

  2. \U是 GNU sed 的一项功能,在 Mac OS X 上默认不可用。您可以从homebrew asgnu-sedmacports as安装它gsed

  3. 如果您不想依赖外部工具,您可以像这样使用 perl 来完成(-i文件已​​就地更改):

    perl -i -pe 's/(?<=)(.)_/\U$1/' file.plist

于 2012-08-07T23:10:44.860 回答