You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VIM中删除包含全部1-4值的前缀对应所有行

解决方案:保留未集齐全部1-4值的前缀行

可以用awk命令高效实现这个需求,它能方便地按前缀分组统计数字,再筛选出符合条件的行。

核心命令

假设你的输入文件名为input.txt,执行以下命令:

BEGIN { FS=":" }
NR == FNR { nums[$1][$2] = 1; next }
! (nums[$1]["1"] && nums[$1]["2"] && nums[$1]["3"] && nums[$1]["4"])
' input.txt input.txt

命令解释

  • BEGIN { FS=":" }:把每行按冒号分割,提取前缀(比如abcd)和数字(比如1)
  • 第一次遍历文件(NR == FNR):用二维数组nums记录每个前缀对应的数字,比如nums["abcd"]["1"] = 1表示abcd有数字1
  • 第二次遍历文件:检查当前行的前缀是否同时拥有1、2、3、4四个数字,只要缺一个,就输出该行

直接修改原文件

如果需要直接替换原文件内容,可以通过临时文件中转:

awk 'BEGIN { FS=":" } NR == FNR { nums[$1][$2] = 1; next } ! (nums[$1]["1"] && nums[$1]["2"] && nums[$1]["3"] && nums[$1]["4"])' input.txt input.txt > temp.txt && mv temp.txt input.txt

可选思路

也可以用sort、uniq结合grep实现,但步骤更繁琐:先按前缀分组统计数字数量,筛选出数量不足4的前缀,再提取这些前缀的行。相比之下awk的方法一步到位,更适合这类场景。

内容的提问来源于stack exchange,提问作者Ujjwal Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:30:01