【问题标题】:RegEx search & replace & casefold, but only in certain linesRegEx 搜索 & 替换 & casefold,但仅限于某些行
【发布时间】:2012-08-05 00:31:12
【问题描述】:

我有一个这样的 XML 文件:

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

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

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

即用大写字母替换后跟下划线的字母(省略下划线),但仅限以&lt;key&gt; 开头的行。这是我目前所拥有的:

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

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

【问题讨论】:

    标签: xml regex sed


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

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

    3. 如果你不想依赖外部工具,你可以像这样使用 perl(-i 文件被原地更改):

      perl -i -pe 's/(?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      相关资源
      最近更新 更多