【发布时间】:2017-03-25 14:25:05
【问题描述】:
我是 Shell 脚本的新手。我正在尝试编写一个代码,该代码应该根据特定条件从一个巨大的文件中 grep 几行。
文件内容,比如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 个或更多条目。
现在,我正在寻找以下输出:
- 过滤行中只有“aee”可用。所以,输出看起来 喜欢:
3 chdc4326aee6.om,bhuvi,01-Oct-2016 5 praaeei5 om,lucknow,11-Nov-2016
- 过滤文件中只有 "ae" 和 "ae + "aee" 的行。所以, 输出将如下所示:
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
- 过滤文件中仅包含“ae”的行。因此,输出将如下所示:
2 chdc501ae.om,patna,26-Aug-2016
请有任何建议。您可以指出一个获取更多相关信息的好地方,以便我学习。
【问题讨论】:
-
这是一个很好的例子,说明如何在 shell 脚本上使用正则表达式 stackoverflow.com/questions/19737675/…
-
嗨,蒂姆,我正在尝试使用 bash shell 编写基本的 Shell 脚本
-
同样,如果你想学习正则表达式,只要谷歌它,你就会有很多地方可以开始
-
您将需要使用负前瞻来实现您想要的。您可以尝试以下正则表达式并告诉我们它是否有效:
^((?!aee).)*ae((?!aee).)*$ -
command:
cat names.txt |grep '^((?!aee).)*ae((?!aee).)*$'没有输出。