我正在尝试在VI中进行查找和替换以删除时间戳。我通常在VI中使用S命令执行此操作,但是如何告诉VI我需要在VI命令的部分结构中删除冒号使用VI去除冒号
EX:“xxxxx xxxxx 24:00:00 CDT”
试图
s:24:00:00 CDT::g
s:"24:00:00 CDT"::g
s:/:::g
任何援助表示赞赏。
我正在尝试在VI中进行查找和替换以删除时间戳。我通常在VI中使用S命令执行此操作,但是如何告诉VI我需要在VI命令的部分结构中删除冒号使用VI去除冒号
EX:“xxxxx xxxxx 24:00:00 CDT”
试图
s:24:00:00 CDT::g
s:"24:00:00 CDT"::g
s:/:::g
任何援助表示赞赏。
通常情况下,vi使用命令字母后面的字符作为分隔符。如果你想确保它
xxxxx xxxxx
:
试试这个:
s!24:00:00 CDT!!g
除非每行都有相同的时间戳,这不是很有用。 – 2009-09-18 16:59:05
是真实的,但它足以解决这个特殊的问题 – homerjay 2009-09-18 17:10:46
在我的vi版本中,我可以执行以下操作来从一行中删除冒号。因人而异。
:s/://g
打败我吧。 我正在使用GVim,它的工作原理。不知道vi在* nix上。 – 2009-09-18 16:53:41
该问题实际上是要求删除时间戳,而不是单个冒号。 – 2009-09-18 16:56:14
我从这个问题中了解到冒号是问题,而且OP知道如何处理其余的问题。此外,问题的标题是'使用VI删除冒号'。所以,这是对这个极简主义的解释。 :) – 2009-09-18 17:17:50
s/\d\+:\d\+:\d\+ CDT//g
作品对我来说:
:
命令后xxxxx xxxxx 24:00:00 CDT
将只影响时间戳(如,该正则表达式以上变化的任何数量的数字> 1),则使用
s/\d\d:\d\d:\d\d CDT//g
其中最终克改变图案的所有匹配,不只是第一个。
如果在列表中有不止一个时区,将它们分组:
:s/\d\+:\d\+:\d\+^Y \(CDT\|UDT\)//g
这不是真正的命令的一部分,因为它应该让你使用任何你喜欢的分隔符。
我可能会尝试: -
%s/\d\{2}:\d{2}:\d{2}//g
这里的问题是不匹配一个冒号,但你已经被教导VIM必须使用冒号来单独它的正则表达式。这是不正确的。
awk/vi/perl/ruby(还有更多)让你指定你想要的wahtever分隔符。这个字符是以下命令字符(在我们的情况下,S)的一个,如:
s/hello/there/
s:hello:there:
[email protected]@[email protected]
都是相同的正则表达式,只是用不同的分隔符。这flexability的意思是,如果你经常使用/,但是你需要匹配一个/在正则表达式,那么你可以切换到其他一些分隔符,如:
sMhel/loMthereM
虽然“M”可能不是最好的当正则表达式包含文本时选择 - 这取决于你的风格和你真正匹配的东西。
你甚至可以使用括号。对于一个正则表达式是:
s[hello]
或
s(hello)
我认为对于搜索和替换的风格,你可以使用s[hello][there]
,甚至可能s[hello](there)
。但是最后一句关于括号的语句是从我使用perl的时候开始记住的一个猜测。
请编辑标题以更好地匹配问题。你说你想删除时间戳,而不仅仅是冒号。 – 2009-09-18 17:00:05
不,问题是他想删除多个冒号。这是一个时间戳并不重要。重要的是他没有意识到冒号不是一个固定的分隔符。 – Pod 2009-09-18 17:05:21
你是对的Pod。直到现在,冒号都是我用过的。谢谢。 – homerjay 2009-09-18 17:10:10