需要从文件中删除以下行中包含的所有行

需要从文件中删除以下行中包含的所有行

我有一些如下所示的文件:

0
04
040
040t
040te
040tes
040test
040test2
041
041t
041te
041tes
041test
041test1
0n
0ne
0ne-
0ne-o
0ne-os
0ne-osx

我需要删除它们后面的行中包含的所有行。换句话说,我需要将其缩减为以下内容:

040test2
041test1
0ne-osx

有没有关于 Linux CLI 或 vim 实现此操作的建议?谢谢。

答案1

在 Vim 中你可以尝试这个全局命令:

g/^\(.*\)\n\1.\+/d
│ ├────────────┘ │
│ │              └ delete the matching lines (see `:h :d`)
│ │
│ └ pattern matching 2 lines, the second one starting like the 1st
└ global command (see `:h :g`)

答案2

Perl 来救援!

perl -lne 'print $prev if -1 == index $_, $prev;
           $prev = $_;
           END { print $prev }' -- file.txt
  • -n逐行读取输入
  • -l从输入中删除换行符并将其添加到print
  • $_是包含从输入读取的实际行的特殊变量
  • 指数如果在字符串(第一个参数)中找不到子字符串(第二个参数),则返回 -1
  • 需要 END 块来打印文件的最后一行

相关内容