gpt4 book ai didi

regex - 在 bash/sed 中,如何匹配小写字母后跟大写字母?

转载 作者:行者123 更新时间:2023-11-29 09:34:33 29 4
gpt4 key购买 nike

我想从输入字符串中删除“aA”、“bB”...“zZ”的所有实例。

例如

echo "foObar" |
sed -Ee 's/([a-z])\U\1//'

应该输出"fbar"

但\U 语法在 sed 表达式的后半部分(替换部分)起作用 - 它无法在匹配子句中解析。

我在将匹配字符转换为大写以便在匹配子句中重用时遇到困难。


如果有人可以建议一个可以在 sed(或 awk)中使用的工作正则表达式,那就太好了。

纯 shell 中的脚本解决方案也可以(我正在尝试以这种方式解决问题)。

工作 PCRE(与 Perl 兼容的正则表达式)也可以,但我不知道它们是如何工作的,所以如果你能提供一个解释来配合你的答案可能会很好。

不幸的是,我正在使用的机器上没有安装 perl 或 python。

最佳答案

您可以使用以下 perl 解决方案:

echo "foObar" | perl -pe 's/([a-z])(?!\1)(?i:\1)//g'

参见 online demo .

详情

  • ([a-z]) - 第 1 组:小写 ASCII 字母
  • (?!\1) - 如果下一个字符与第 1 组捕获的字符相同,则匹配失败的否定前瞻
  • (?i:\1) - 与第 1 组捕获的字符相同,但情况不同(由于它之前的前瞻)。

-e选项允许您定义要由编译器执行的 Perl 代码和 -p选项总是打印 $_ 的内容每次循环。参见 more here .

关于regex - 在 bash/sed 中,如何匹配小写字母后跟大写字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53729122/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com