在Vim的搜索中运行AWK

时间:2009-12-19 23:59:15

标签: vim awk

如何在Vim的搜索选择中运行AWK?

我的伪代码

%s/!awk '{ print $2 }'//d

我正在尝试删除文件中的给定列。

6 个答案:

答案 0 :(得分:18)

虽然它们可能解决了原始海报的问题,但答案都没有解决问题标题中公布的问题。我建议删除问题的第一行并将其重新命名为“在vim中删除一列”,这一点已被一致拒绝,这是一个解决方案,通过实际寻找到达那里的人来到这里。

awk中使用vim删除列(此处为第二个,如OP的伪代码示例中所示):

:%!awk '{$2=""; print $0}'

当然,它也适用于文件的一部分 - 例如对于第10到20行:

:10,20!awk '{$2=""; print $0}'

对于awk选择搜索中的“[运行] Vim”,不确定您是否可以完全执行此操作,但无论如何搜索和替换对于{{1}来说都是一项轻松的工作如果不是它的主要目的。如果匹配,则以下内容将第二列中的“pattern”替换为“betterpattern”:

awk

请注意,:%!awk '$2~"pattern" {gsub("pattern","betterpattern",$2)} 运算符需要转义(NOT而不是\!)。如果匹配“number”并且让其他行保持不变,则以下将第二列中的值替换为增量10;

!

从这一点来说,它只是:%!awk '$2~"number" {gsub($1,$1+10)} $2\!~"number" {print $0}' 语法。

答案 1 :(得分:3)

在命令模式下,按 Ctrl - v 进入可视模式,然后可以使用光标移动键来阻止选择列。然后,您可以使用适当的vim命令和击键来猛拉并将其删除或删除任何内容。

答案 2 :(得分:2)

即使第二列不是矩形区域,也不必使用awk。使用替换:

:%s/ \w\+ / / 

第二列由至少一个由空格分隔的单词字符(\ w \ +)组成。替换是一个空白。这个是针对选定范围的行:

:'<,'>s/ \w\+ / / 

答案 3 :(得分:1)

如果您想删除某些内容,请使用:%s/pattern//

模式不能是命令,它主要是正则表达式。在正则表达式中表达第二个字段并不是很容易

如果要删除第二个字段,可以通过剪切实用程序

过滤文本
:%! cut -d ' ' -f 2 --complement

答案 4 :(得分:0)

你可以按 0 ,然后按 w 转到第二列,然后执行 c w

答案 5 :(得分:0)

您可以从vim中删除文件中的给定列。 在命令模式下,使用以下命令删除列n:

:%s/\(.\{n-1}\).\{1}\(.*$\)/\1\2/g