【问题标题】:regex replace: '[A-Z]'' to [A-Z]' - I can't preserve the letter in in the string正则表达式替换:'[A-Z]'' 到 [A-Z]' - 我无法保留字符串中的字母
【发布时间】:2012-02-24 19:13:11
【问题描述】:

我的 google foo 让我失望了……

我有一个有 SQL 格式问题的文件(远超过 2 个演出)。所以我需要一个正则表达式来更新以下示例(记住,我不知道有多少或字母是什么):

  1. 'N'' 应改为 N'
  2. 'L'' 应更改为 L' 等等

我已经尝试过(在 VIM 和 sed 中):

s/'[A-Z]''/$1'/

但这只会产生:

'N'' -> '$1'

【问题讨论】:

    标签: regex sed vi


    【解决方案1】:

    试一试:

    sed "s/\([[:alpha:]]'\)'/\1/g" file
    

    示例输出

    $ sed "s/\([[:alpha:]]'\)'/\1/g" <<<"aBcD''eg''H'i"
    aBcD'eg'H'i
    

    注意:既然你说你不知道它们会是什么字母,我假设它们可能是小写的。如果您知道它们总是大写,那么将[[:alpha:]] 更改为[[:upper:]]。这些字符类分别优于 [A-Za-z][A-Z],因为无论语言环境如何,它们都将始终按您的预期工作。

    【讨论】:

      【解决方案2】:

      sed 中的反向引用是\1,而不是$1。您还需要使用\(\) 捕获该字母(并且可能使用全局标志g)。

      你的 sed 表达式应该是:

      s/'\([A-Z]\)''/\1'/g
      

      【讨论】:

        猜你喜欢
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-02
        • 2016-03-04
        • 1970-01-01
        • 2012-08-05
        • 1970-01-01
        • 2011-08-26
        相关资源
        最近更新 更多