正则表达式替换:'[A-Z]''到[A-Z]' - 我无法保留字符串中的字母

时间:2012-02-02 04:21:54

标签: regex sed vi

我的谷歌foo让我失望......

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

  1. 'N''应更改为N'
  2. 'L''应更改为L' 等
  3. 我已经尝试过(在VIM和sed内):

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

    但这只会产生:

    'N'' -> '$1'
    

2 个答案:

答案 0 :(得分:4)

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

你的sed表达式应该是:

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

答案 1 :(得分: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],因为无论语言环境如何,它们始终可以正常工作。