regex - 使用 VI 删除冒号

标签 regex vi delimiter

我正在尝试在 VI 中进行查找和替换以删除时间戳。我通常使用 S 命令在 VI 中执行此操作,但是当它是 VI 命令本身的结构的一部分时,我如何告诉 VI 我需要删除冒号

例如:“xxxxx xxxxx 24:00:00 CDT”

试过了
s:24:00:00 CDT::gs:"24:00:00 CDT"::gs:/:::g
任何帮助表示赞赏。

最佳答案

这里的问题不是匹配冒号,而是你被告知 vim 必须使用冒号来分隔它的正则表达式。这是不正确的。

awk/vi/perl/ruby(以及更多)让你指定你想要的 wahtever 分隔符。这个字符是跟在命令字符后面的字符(在我们的例子中是一个 S),例如:

s/hello/there/
s:hello:there:
s@hello@there@

都是相同的正则表达式,只是分隔符不同。这种灵活性意味着如果您经常使用/,但随后需要匹配正则表达式中的/,那么您可以切换到其他一些分隔符,例如:
sMhel/loMthereM

尽管当正则表达式包含文本时“M”可能不是最佳选择——这取决于您的风格以及您真正匹配的内容。

您甚至可以使用括号。对于单个正则表达式,它是:
s[hello]

或者
s(hello)

我认为对于搜索和替换样式,您可以使用 s[hello][there]甚至可能 s[hello](there) .但是关于括号的最后一句话是我第一次使用 perl 时记得的一半。

关于regex - 使用 VI 删除冒号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1445686/

相关文章:

当组长度不同时匹配的正则表达式

vim - 更换 MacVim 中的领导者?

java - 在java中使用vi编辑器编辑文件

c++ - 在 C++ 中将字节字符串拆分为 BYTES vector

python - Pandas 随机插入不存在的分隔符

javascript 正则表达式不允许非 ASCII 和反斜杠

Javascript:使用正则表达式反向引用引用数组元素

vim - 如何从当前位置复制vim中的特定行?

java - 处理 csv 文件的不同分隔符

java - 如何在java中匹配最大长度的正则表达式