我是Shell脚本的新手。我正在尝试编写一个代码,该代码应根据特定条件从一个巨大的文件中删除几行。
文件内容,例如 names.txt
1 ae1aee2sonata om,vadodara,23-Aug-2016
2 chdc501ae om,patna,26-Aug-2016
3 chdc4326aee6 om,bhuvi,01-Oct-2016
4 ae3aee6prsons hqr,bangalore,29-Aug-2016
5 praaeei5 om,lucknow,11-Nov-2016
6 aetaeen6pana om,phanto,13-Oct-2016
继续进行500次以上的参赛作品。
现在,我正在寻找以下输出:
3 chdc4326aee6.om,bhuvi,01-Oct-2016 5 praaeei5 om,lucknow,11-Nov-2016
1 ae1aee2sonata.hqr,vadodara,23-Aug-2016 2 chdc501ae.om,patna,26-Aug-2016 4 ae3aee6prsons hqr,bangalore,29-Aug-2016 6 aetaeen6pana om,phanto,13-Oct-2016
2 chdc501ae.om,patna,26-Aug-2016
请提出任何建议。你可以指出一个获得更多相关信息的好地方,所以我可以学习。
答案 0 :(得分:1)
将grep与选项-P和lookahead
一起使用文件:
$ cat data.txt
1 ae1aee2sonata om,vadodara,23-Aug-2016
2 chdc501ae om,patna,26-Aug-2016
3 chdc4326aee6 om,bhuvi,01-Oct-2016
4 ae3aee6prsons hqr,bangalore,29-Aug-2016
5 praaeei5 om,lucknow,11-Nov-2016
6 aetaeen6pana om,phanto,13-Oct-2016
查找aee
但不是ae
:
$ grep -P '^(?:(?=.*aee[^e]))?(?!.*ae[^e]).*(aee)[^e]' data.txt
3 chdc4326aee6 om,bhuvi,01-Oct-2016
5 praaeei5 om,lucknow,11-Nov-2016
查找ae
或ae
+ aee
:
$ grep -P '^(?:(?!.*aee[^e]))?(?=.*ae[^e]).*(aee?)[^e]' data.txt
1 ae1aee2sonata om,vadodara,23-Aug-2016
2 chdc501ae om,patna,26-Aug-2016
4 ae3aee6prsons hqr,bangalore,29-Aug-2016
6 aetaeen6pana om,phanto,13-Oct-2016
仅查找ae
:
$ grep -P '^(?!.*aee[^e])(?=.*ae[^e]).*(ae)[^e]' data.txt
2 chdc501ae om,patna,26-Aug-2016