如何在vi或vim编辑器中删除特定字符
我在vi中有一些txt:如何在vi或vim编辑器中删除特定字符,vim,Vim,我在vi中有一些txt: |NC_004718|29751nt|SARS |NC_045512|29903nt|Severe |NC_004718|29751nt|SARS |NC_045512|29903nt|Severe |NC_004718|29751nt|SARS 现在我想替换NC_004718之后的所有内容,我的预期输出是: NC_004718 NC_045512 NC_004718 NC_045512 NC_004718 怎么做?谢谢。例如 :g/NC_\d\+/normal!
|NC_004718|29751nt|SARS
|NC_045512|29903nt|Severe
|NC_004718|29751nt|SARS
|NC_045512|29903nt|Severe
|NC_004718|29751nt|SARS
现在我想替换NC_004718之后的所有内容,我的预期输出是:
NC_004718
NC_045512
NC_004718
NC_045512
NC_004718
怎么做?谢谢。例如
:g/NC_\d\+/normal! ygnV]p
匹配行:g/regex/
正常代码>以执行正常模式命令
拖动先前由ygn
匹配的文本:g
选择整行V
或]p
用匹配项替换行p
:%s/^|\([^|]\+\)|.\+/\1/
要分解正在发生的事情:
%
表示要将命令应用于文件中的每一行s
表示您正在执行替换命令(每行)。s
命令的语法为s//
^|\([^ |]\+\)\.\+
。
表示从行开始匹配^
匹配字符|
|
匹配除字符\([^ |]\+\)
之外的所有字符。请注意,真正的正则表达式实际上是\
,附加的([^ |]+)
字符在这里,因为Vim需要知道它们是用于处理的特殊字符,而不是它需要匹配的精确字符。还请注意,括号用于将匹配项捕获到一个组中(请参见下文)\
再次匹配实际字符|
|
匹配所有字符,直到行尾。请注意,默认情况下,\+
被视为特殊字符,但
仍需要前面的+
\
\1
。这表示Vim应该用第一组中捕获的内容(即第一组括号)替换文本/
之后没有任何内容如果您只有显示的行,请尝试:
:%norm xf|D
我用示例文本对此进行了测试,它删除了所有文本。