首页 > 解决方案 > Perl 系统 Grep 和粘贴

问题描述

我有一个看起来像这样的文件:


斗牛犬

波斯猫
_


大猩猩


Pitbull
Lab
Shepard
哈士奇

我希望能够搜索包含 dog 的每一行并选择所有内容,直到下一个空行并将其放入一个新文件中。

我想要一个输出文件,如:


斗牛犬


Pitbull
Lab
Shepard
哈士奇

我知道我可以使用 grep 来查找单词 dog,但我该如何使用它,或者我可以使用它,以便它抓取它之后的所有内容,直到下一个空行并将其移动到另一个文件中。

我正在用 Perl 编写一个脚本来执行此操作,因为我希望添加其他内容,使用 Perl 可以使它们变得更容易。我打算用它system(grep....)来找到这个词,但我不知道在那之后该怎么做。

我还会注意到我希望能够递归地执行此操作。我有很多文件看起来像我展示的那样,我想从所有文件中提取 Dog 块。所以这将是从目录中递归的东西。

标签: perlgrep

解决方案


perl -ne 'print if /^Dog/../^$/' file

perl 中的..and运算符可以连接两个条件。...从第一个评估为真直到第二个条件评估为真,连接的条件将评估为真。所以你print要从时间$_ =~ m/^Dog/是真的直到$_ =~ m/^\s+$/是真的。以上是它的简写。

..vs之间的区别在...这里并不重要,因为在这种情况下,条件不能在同一行上都为真。


推荐阅读