我正在尝试在 VI 中进行查找和替换以删除时间戳。我通常使用 S 命令在 VI 中执行此操作,但是当它是 VI 命令本身的结构的一部分时,我如何告诉 VI 我需要删除冒号
例如:“xxxxx xxxxx 24:00:00 CDT”
试过了s:24:00:00 CDT::g
s:"24:00:00 CDT"::g
s:/:::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/