通过将搜索模式传输到Sed中来删除文件中的行

时间:2016-08-08 12:21:30

标签: unix sed grep aix

无论如何,我们可以删除文件中的行,如下所示。

grep {SearchPattern} {file} |切-c 1-9 | Sed {file}

无论我在搜索什么,实际上可能比我想要删除的行少。 我想实际搜索并获取前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

你可以搜索所有“已终止”的人并通过在第一列中取前9位来获取他们的ID。我想删除他们的所有记录,无论是支付状态还是注册状态或其他

1 个答案:

答案 0 :(得分:2)

你想要这样的东西:

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

<强>更新

尝试(非GNU grep):

awk '/Terminated/{$0=substr($0, 1, 9);print "^" $0}' 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/{$0=substr($0, 1, 9);print "^" $0}' file | grep -vf - file
1003119343009999   Pay Status                    N/A                                     09/10/201405/28/2015