删除与模式匹配的相邻行

删除与模式匹配的相邻行

输入:具有排序行的文件

输出:如果我们要删除所有数字,则文件中包含与相邻行匹配的“唯一”行

例子

输入

abbylove2007
abbylove2008
abbylove2012
AbbyLove2014
abby1994lover
abby2007lover
abbylovesaal2018
abbylovesbsb2003

输出

abbylove2007
abby1994lover

这里留下了 abbylove2007 和 abby1994lover,因为有多个相邻行匹配 abbylove\d+ 和 abby\d+lover

答案1

$ awk '{ curr=$0; gsub("[0-9]","",curr) } curr != prev { prev=curr; prevfull=$0; flag=0; next } !flag { print prevfull; flag=1 }' test
abbylove2007
abby1994lover

首先,从当前行中删除数字。如果此结果与删除数字后的前一行不同,则用此行更新前一行,记住完整的前一行,并将变量设置flag为零,然后继续下一行。

flag当输出与前一行相同的行时使用该变量,以确保我们只输出第一的这些行。

对于与前一行相同的行(删除数字),如果未设置标志,则打印完整的前一行,然后设置标志。

答案2

这将是修改后的 sed 等价于uniq -d

sed '$!N; s/^\([^0-9]*\)\(.*\)\n\1[0-9].*$/\1\2/; t; D'

相关内容