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

发布于 2025-01-01 09:45:26 字数 296 浏览 0 评论 0原文

我的 google foo 失败了...

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

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

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

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

但这只会产生:

'N'' -> '$1'

My google foo is failing me...

I have a file (well over 2 gig's) that has a SQL format problem. So I need a regex that will update the following examples (remember, I don't know how many there are or what the letters are):

  1. 'N'' should be changed to N'
  2. 'L'' should be changed to L'
    etc

I've tried (within VIM and sed):

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

but that just produces:

'N'' -> '$1'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

栖竹 2025-01-08 09:45:26

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

你的 sed 表达式应该是:

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

A backreference in sed is \1, not $1. You also need to capture the letter using \(\) (and probably use the global flag g).

Your sed expression should be:

s/'\([A-Z]\)''/\1'/g
枕花眠 2025-01-08 09:45:26

试一试:

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

示例输出

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

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

Give this a shot:

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

Example Output

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

Note: Since you said you didn't know what letters they would be I assumed they could be lower case. If you know for a fact they are always uppercase, then change [[:alpha:]] to [[:upper:]]. These character classes are preferred over [A-Za-z] and [A-Z], respectively, because they will always work as you expect no matter the locale.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文