首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl系统Grep和粘贴

Perl系统Grep和粘贴
EN

Stack Overflow用户
提问于 2019-09-25 23:40:44
回答 2查看 84关注 0票数 1

我有一个像这样的文件:

DogBulldog

小猎犬

CatPersian

ApeGorilla

DogPitbull

实验

谢泼德

哈士奇

我希望能够搜索每一行包含狗和选择一切,直到下一个空行,并将其放入一个新的文件。

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

DogBulldog

小猎犬

DogPitbull

实验

谢泼德

哈士奇

我知道我可以使用grep来找到单词狗,但是我如何使用它,或者用什么来使用它,这样它就可以抓住它之后的所有东西,直到下一个空行,并将它移动到另一个文件中。

为了做到这一点,我用Perl编写了一个脚本,因为我希望添加一些其他的东西,这样可以使Perl更容易实现。我本来打算用system(grep....)来找到这个词,但后来我不知道该怎么做。

我还将注意到,我希望能够递归地做到这一点。我有许多与我所显示的文件类似的文件,我想从所有这些文件中提取Dog块。因此,这将是从目录递归的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-26 14:29:40

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

perl中的.....运算符可以连接两个条件。从第一个计算为真到第二个条件计算为真的时间起,联接条件将计算为真。因此,您希望从$_ =~ m/^Dog/为真到$_ =~ m/^\s+$/为真这段时间开始执行$_ =~ m/^\s+$/。以上就是这一点的简写。

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

票数 4
EN

Stack Overflow用户

发布于 2019-09-26 05:32:47

如果您可以使用awk,那么就可以这样做。通过将记录选择器设置为空,awk在块模式下工作。测试块是否以dog开头,如果是,请执行默认操作,打印块。

代码语言:javascript
复制
awk '/^Dog/' ORS="\n\n" RS="" file
Dog
Bulldog
Terrier

Dog
Pitbull
Lab
Shepard
Husky
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58107808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档