我对此进行了一些搜索,但我一定使用了错误的术语 - 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(使用前将#替换为@)