通过管道搜索模式到 Sed 中删除文件中的行

Delete lines in a file by piping search pattern into Sed

我们是否可以像下面这样删除文件中的行。

grep {SearchPattern} {文件} |切-c 1-9 | Sed {文件}

无论我搜索什么,实际上出现的次数都少于我要删除的行数。 我想实际搜索并获取前 9 个字符并再次搜索并删除输出中的任何行。

我的输入文件如下。

0002206993022      Enrollment Status             Terminated                              08/01/201412/31/9999 
0003119343022      Enrollment Status             Terminated                              05/28/201512/31/9999
0003119343009999   Pay Status                    N/A                                     09/10/201405/28/2015

你可以搜索所有 "Terminated" 人并通过获取第一列中的前 9 位数字来获取他们的 ID。我想删除他们所有的记录,无论是支付状态还是注册状态等等

你想要这样的东西:

awk '/Terminated/{[=10=]=substr([=10=], 1, 9);print "^" [=10=]}' file | grep -vf - file

更新:

尝试(非 GNU grep):

awk '/Terminated/{[=11=]=substr([=11=], 1, 9);print "^" [=11=]}' file | grep -vf /dev/stdin file

测试:

$ cat file
0002206993022      Enrollment Status             Terminated                              08/01/201412/31/9999 
0003119343022      Enrollment Status             Terminated                              05/28/201512/31/9999
0003119343009999   Pay Status                    N/A                                     09/10/201405/28/2015
1003119343009999   Pay Status                    N/A                                     09/10/201405/28/2015

$ awk '/Terminated/{[=12=]=substr([=12=], 1, 9);print "^" [=12=]}' file | grep -vf - file
1003119343009999   Pay Status                    N/A                                     09/10/201405/28/2015