从包含确切数字的文件中删除一行并在第一次查找和删除时退出

delete a line from a file containing the exact number and quit on the first find & delete

我试图只从一个文件中删除一个数值,而该文件可能有多个实例。 file_input=

2  
4  
18  
8  
8  
10  
12  
14  

我需要删除“8”,但只需要删除一次,我想保留“18”。最终结果应该在 file_output 中:

2  
4  
18  
8  
10  
12  
14  

我尝试了 sed '/8/d'grep -v -w '8'awk ' !=8',但它们都删除了 8、8 和 18。

我建议使用 GNU sed:

sed '1,/^8$/{/^8$/d}' file

输出:

2
4
8
10
12
14

从第一行到仅包含 8 (1,/^8$/) 的行删除仅包含 8 (/^8$/d) 的行。


参见:man sedThe Stack Overflow Regular Expressions FAQ

这是 awk 版本

$ awk '!(==8 && !c++)' ip.txt
2  
4  
18  
8  
10  
12  
14  
  • ==8 && !c++ 检查第一个字段是否正好是 8,如果是,则检查 c 的计算结果是否为 false(c 将递增,因此不会为 false下次)
    • 当这是真的时我们不想打印,因此外部否定
  • 即使第一个字段周围有空格,这也会起作用,就像在给定的示例中一样