gpt4 book ai didi

Vim 或 sed : Replace character(s) within a pattern

转载 作者:行者123 更新时间:2023-12-01 14:35:31 25 4
gpt4 key购买 nike

我想在字符 ('_') 前面和后面都是大写字母的所有地方用连字符替换下划线,例如QWQW_IOIO、OP_FD_GF_JK、TRT_JKJ等,整个一个文档都需要替换。

我尝试在 vim 中使用以下方法替换它::%s/[A-Z]_[A-Z]/[A-Z]-[A-Z]/g但这导致 QWQW_IOIOQWQ[A-Z]-[A-Z]OIO :(

我尝试使用 sed 命令:sed -i '/[A-Z]_[A-Z]/s/_/-/g' ./file_name这导致了整个生产线的更换。例如

QWQW_IOIO 变量可能包含 '_' 或 '-' 行被替换为

QWQW-IOIO 变量可能包含 '-' 或 '-'

最佳答案

您对第一个 vim 方法的想法是正确的。但是您需要使用捕获组来记住在 [A-Z] 部分中找到的字符。这些解释得很好here:h/\1 下。作为旁注,我建议使用 \u 而不是 [A-Z],因为它更短也更快。这意味着您想要的解决方案是:

:%s/\(\u\)_\(\u\)/\1-\2/g

或者,如果您想使用魔术设置使其更具可读性:

:%s/\v(\u)_(\u)/\1-\2/g

另一种选择是限制被 \zs\ze 原子替换的搜索部分:

:%s/\u\zs_\ze\u/-/g

这是我所知道的最短的解决方案。

关于Vim 或 sed : Replace character(s) within a pattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45065955/

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