如何在Vim的搜索选择中运行AWK?
我的伪代码
%s/!awk '{ print $2 }'//d
我正在尝试删除文件中的给定列。
答案 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