Ruby 相当于“grep -C 5”来获取匹配周围行的上下文?

2024-03-20

我对此进行了一些搜索,但我一定使用了错误的术语 - ruby​​ 是否有办法 grep 查找字符串/正则表达式并返回周围的 5 行(上面和下面)?我知道我可以打电话"grep -C 5 ..."或者甚至编写我自己的方法,但这似乎是 ruby​​ 拥有的东西,而我只是没有使用正确的搜索词。


您可以使用正则表达式来完成。这是我们要搜索的字符串:

s = %{The first line
The second line
The third line
The fourth line
The fifth line
The sixth line
The seventh line
The eight line
The ninth line
The tenth line
}

EOL 对我来说是“\n”,但对你来说可能是“\r\n”。我将把它固定为一个常数:

EOL = '\n'

为了简化正则表达式,我们将只定义一次“context”模式:

CONTEXT_LINES = 2
CONTEXT = "((?:.*#{EOL}){#{CONTEXT_LINES}})"

我们将搜索任何包含单词“fifth”的行。请注意,此正则表达式必须抓取整行,包括行尾,才能正常工作:

regexp = /.*fifth.*#{EOL}/

最后,进行搜索并显示结果:

s =~ /^#{CONTEXT}(#{regexp})#{CONTEXT}/
before, match, after = $1, $2, $3
p before    # => "The third line\nThe fourth line\n"
p match     # => "The fifth line\n"
p after     # => "The sixth line\nThe seventh line\n"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 相当于“grep -C 5”来获取匹配周围行的上下文? 的相关文章

随机推荐

  • Heroku 上多部分表单的路由问题

    这是一个非常奇怪的问题 不幸的是我无法提供大量信息 因为我什至不知道从哪里开始诊断问题 我希望有人能神奇地听到该做什么 我很乐意在必要时进行澄清 由于某种原因 每当我使用 Chrome 在 Heroku 上提交带有文件附件的新的多部分表单时
  • systemctl 命令在 docker-container 中不起作用

    我已经为我的 Spring Boot 应用程序制作了一个 Docker 映像 我无法在 Docker 容器内运行 systemctl 命令 这是我执行时得到的结果 systemctl daemon reload Failed to conn
  • 为什么 PHP 中需要类型提示?

    我无法理解 PHP 中类型提示的重要性 显然 PHP 中的 类型提示 可以定义如下 类型提示 强制您仅传递特定类型的对象 这可以防止您传递不兼容的值 并创建一个 如果您与团队合作等 则为标准 那么 在最基本的级别上进行类型提示 不需要让代码
  • 获取特定列值的 SSRS 矩阵行总计

    在 Microsoft Sql Server 报告服务 2008 R2 中Matrix 我想添加一列 显示一个数据项除以该行数据项总数的百分比 Total的表达式为 Sum Fields Count Value 我如何访问该行的成功总和成功
  • 我应该如何将字典编码为 HTTP GET 查询字符串?

    HTTP GET 查询字符串是键 值对的有序序列 spam eggs spam ham foo bar 在某些语义下 相当于以下字典 spam eggs ham foo bar 这恰好适用于所请求页面的布尔属性 expand 1 expan
  • 使用 LINQ2SQL 插入新的子级+父级

    与 LINQ2SQL 作斗争 我是新手 到目前为止一切都还好 但这个问题确实让我悲伤 我有两个对象 父对象和子对象 定义如下 Table Name Parent public class Parent Column IsPrimaryKey
  • 关闭时似乎有 6 个泄漏的信号量对象需要清理 warnings.warn('resource_tracker: 似乎有 %d

    我正在尝试通过 python 3 8 在我的 Firebase 实时数据库上进行测试连接 我有两个脚本 一个是wdata 写入数据 另一个是rdata 读取数据 wdata py 是 from firebase import firebas
  • shell 脚本删除文件(如果已存在)

    我正在研究一些将数据存储在文件中的东西 但每次我运行脚本时 它都会附加到前一个文件中 我需要有关如何删除该文件 如果该文件已存在 的帮助 不必费心检查该文件是否存在 只需尝试将其删除即可 rm f p a t h or rm p a t h
  • Python:获取字符串的大小(以字节为单位)

    我有一个要通过网络发送的字符串 我需要检查它所表示的总字节数 sys getsizeof string name 返回额外的字节 例如对于sys getsizeof a 返回 22 而在 python 中 一个字符仅用 1 个字节表示 还有
  • Java 应用程序不显示输出

    这是我更新的代码 package car1 公共类主要 公共静态无效主 字符串 args HondaCivic 类实现 car1 int speed 0 int rpm 0 int gear 1 public void speedUp in
  • 如何使用 Jersey REST 处理服务不可用的情况

    我有一个与 Spring 集成的球衣 RESTful 服务 web xml 中映射的基本 url 是 rest 我的服务等级如下 Resource Scope request Path service Component public cl
  • 如何在角度材料2中选择默认项目选择多个

    我正在开发 Angular 2 Material 应用程序 我有一个情况 其中存在多选元素 并且我有一个带有复选框的列表 因此我可以一次选择多个项目 我可以使用角度材质组件来实现这一点 但我想要的是默认检查 2 3 个项目 如果我选择 取消
  • Laravel 5 在测试之间重新播种数据库以进行单元测试

    我从一个种子数据库开始 并尝试在 Laravel 5 的单元测试之间重新种子数据库 在 Laravel 4 中 我知道您可以简单地使用 Illuminate Support Facades Artisan 并运行命令 Artisan cal
  • 为什么java.nio.files.Path中没有Path构造函数?

    Path 类没有记录的构造函数 但可以通过以下方式创建实例 Paths get 这是FileSystems getDefault getPath 那么有人可以解释这个设计决策吗 有人可以解释这个设计决定吗 这是因为 JSR 203 允许从多
  • ManageUserViewModel 类在哪里?

    我使用 ASP Net MVC 5 EF 6 和 Net 4 5 1 创建了一个项目 在某些时候 我需要更改项目所在的命名空间 从 MyTestProject 更改为 MyRealProject 在整个网站上进行这些更改后 我现在在一些视图
  • 避免贫血域模型 - 一个真实的例子

    我试图理解贫血领域模型以及为什么它们被认为是反模式 这是一个现实世界的例子 我有一个 Employee 类 它有大量的属性 姓名 性别 用户名等 public class Employee public string Name get se
  • WCF 与 Java 兼容吗?

    哪些 WCF 服务协议与 Java 配合得很好 TCP 服务绑定是否可与 java 远程处理 Corba EJB JMS 等 配合使用 作为服务端点公开的 Web 服务又如何呢 这些是否已经针对通用 Java WebServices 堆栈进
  • 如何为特定目录设置open_basedir

    我有一个目录 htdocs unsecured我想限制该目录或其子目录中的任何内容访问该目录之外的任何内容 在哪里以及如何设置open basedir仅适用于此目录 您可以设置open basedir在您的 Apache 配置文件 php
  • 将 git lfs ls-files 与 git ls-files ':(attr:filter=lfs)' 进行比较是否是检测不受 lfs 管理的 lfs 文件的可靠方法?

    我尝试找到一种方法来确定 git 存储库中的文件是否由 git lfs 正确管理 到目前为止 我发现比较结果git lfs ls files and git ls files attr filter lfs 似乎给了我我想要的 Add Ty
  • Ruby 相当于“grep -C 5”来获取匹配周围行的上下文?

    我对此进行了一些搜索 但我一定使用了错误的术语 ruby 是否有办法 grep 查找字符串 正则表达式并返回周围的 5 行 上面和下面 我知道我可以打电话 grep C 5 或者甚至编写我自己的方法 但这似乎是 ruby 拥有的东西 而我只