perl - Perl 系统 Grep 和粘贴
问题描述
我有一个看起来像这样的文件:
狗
斗牛犬
梗波斯猫
_猿
大猩猩狗
Pitbull
Lab
Shepard
哈士奇
我希望能够搜索包含 dog 的每一行并选择所有内容,直到下一个空行并将其放入一个新文件中。
我想要一个输出文件,如:
狗
斗牛犬
梗狗
Pitbull
Lab
Shepard
哈士奇
我知道我可以使用 grep 来查找单词 dog,但我该如何使用它,或者我可以使用它,以便它抓取它之后的所有内容,直到下一个空行并将其移动到另一个文件中。
我正在用 Perl 编写一个脚本来执行此操作,因为我希望添加其他内容,使用 Perl 可以使它们变得更容易。我打算用它system(grep....)
来找到这个词,但我不知道在那之后该怎么做。
我还会注意到我希望能够递归地执行此操作。我有很多文件看起来像我展示的那样,我想从所有文件中提取 Dog 块。所以这将是从目录中递归的东西。
解决方案
perl -ne 'print if /^Dog/../^$/' file
perl 中的..
and运算符可以连接两个条件。...
从第一个评估为真直到第二个条件评估为真,连接的条件将评估为真。所以你print
要从时间$_ =~ m/^Dog/
是真的直到$_ =~ m/^\s+$/
是真的。以上是它的简写。
..
vs之间的区别在...
这里并不重要,因为在这种情况下,条件不能在同一行上都为真。
推荐阅读
- android - 是否可以直接在 Android 设备上构建 Android 应用程序?
- django - 将新用户添加到刚刚创建的对象
- firebase - 从 Firebase 云函数获取响应
- javascript - 更改 package.json 中的代理不起作用
- php - td Rowspan 之后的 html,下一列数据转到下一行
- reactjs - 在 React JS 中调用 javascript 控制台 API
- vba - vba,soap webservice不完整的响应
- python - 找不到满足 pip 要求的版本 - 在 python 2.7 中的代理后面安装 pip
- ios - SwiftDate 字符串解析返回的结果减少了 1 天
- python - 试图学习如何按位或运算符 | 适用于 python,我想知道为什么 1 | 2 == 3?