【发布时间】:2012-02-24 19:13:11
【问题描述】:
我的 google foo 让我失望了……
我有一个有 SQL 格式问题的文件(远超过 2 个演出)。所以我需要一个正则表达式来更新以下示例(记住,我不知道有多少或字母是什么):
- 'N'' 应改为 N'
- 'L'' 应更改为 L' 等等
我已经尝试过(在 VIM 和 sed 中):
s/'[A-Z]''/$1'/
但这只会产生:
'N'' -> '$1'
【问题讨论】:
我的 google foo 让我失望了……
我有一个有 SQL 格式问题的文件(远超过 2 个演出)。所以我需要一个正则表达式来更新以下示例(记住,我不知道有多少或字母是什么):
我已经尝试过(在 VIM 和 sed 中):
s/'[A-Z]''/$1'/
但这只会产生:
'N'' -> '$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],因为无论语言环境如何,它们都将始终按您的预期工作。
【讨论】:
sed 中的反向引用是\1,而不是$1。您还需要使用\(\) 捕获该字母(并且可能使用全局标志g)。
你的 sed 表达式应该是:
s/'\([A-Z]\)''/\1'/g
【讨论】: