gpt4 book ai didi

regex - 根据外部或内部单引号以不同方式替换空格

转载 作者:行者123 更新时间:2023-12-02 09:23:08 25 4
gpt4 key购买 nike

我的输入有一些字段

  • 用空格分隔,
  • 其他一些用引号引起来,也用空格分隔

这是一个示例输入:

active=1 'oldest active'=0s disabled=0 'function call'=0

我想更换:

  • |
  • 引号外的所有空格
  • _ 内的所有引号

输出为:

active=1|'oldest_active'=0s|disabled=0|'function_call'=0

我使用网上找到的 sedperl 尝试了不同的解决方案,但没有达到我想要的效果。

最佳答案

$ s="active=1 'oldest active'=0s disabled=0 'function call'=0"
$ echo "$s" | perl -pe "s/'[^']*'(*SKIP)(*F)| /|/g; s/ /_/g"
active=1|'oldest_active'=0s|disabled=0|'function_call'=0

两步替换:

  • 首先,'[^']*'(*SKIP)(*F) 将跳过 ' 包围的所有模式,并将剩余空格替换为 |
  • 其次,' 中现在留下的空格将替换为 _


替代解决方案:

$ echo "$s" | perl -pe "s/'[^']*'/$& =~ s| |_|gr/ge; s/ /|/g"
active=1|'oldest_active'=0s|disabled=0|'function_call'=0
  • 灵感来自 this answer
  • '[^']*'/$& =~ s| |_|gr/ge 使用另一个替换命令替换匹配模式 '[^']*' 中的所有空格。 e 修饰符允许在替换部分使用命令而不是字符串
  • 然后用 s//|/g 处理剩余的空格


进一步阅读:

关于regex - 根据外部或内部单引号以不同方式替换空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40265880/

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