使用VI去除结肠

hom*_*jay 2 regex vi delimiter

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

EX:"xxxxx xxxxx 24:00:00 CDT"

试着

s:24:00:00 CDT::g

s:"24:00:00 CDT"::g

s:/:::g

任何帮助表示赞赏.

Pod*_*Pod 6

这里的问题不是匹配冒号,而是你已经被教导vim必须使用冒号分隔它的正则表达式.这是不正确的.

awk/vi/perl/ruby​​(以及更多)允许您指定所需的wahtever分隔符.该字符是命令字符后面的字符(在我们的例子中是S),例如:

s/hello/there/
s:hello:there:
s@hello@there@
Run Code Online (Sandbox Code Playgroud)

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

sMhel/loMthereM
Run Code Online (Sandbox Code Playgroud)

虽然当正则表达式包含文本时"M"可能不是最佳选择 - 但这取决于你的风格以及你真正匹配的内容.

你甚至可以使用括号.对于单个正则表达式,它是:

s[hello]
Run Code Online (Sandbox Code Playgroud)

要么

s(hello)
Run Code Online (Sandbox Code Playgroud)

我认为你可以使用s[hello][there]或甚至可以使用搜索和替换样式s[hello](there).但关于方括号的最后一句是从我使用perl时的半记忆猜测.