4

我想做一个像这样的 AWK 风格的范围正则表达式:

awk ' /hoststatus/,/\}/' file

在 AWK 中,这将打印文件中两个模式之间的所有行:

hoststatus {
host_name=myhost
modified_attributes=0
check_command=check-host-alive
check_period=24x7
notification_period=workhours
check_interval=5.000000
retry_interval=1.000000
event_handler=
}

我如何在 Ruby 中做到这一点?

奖励:你会如何在 Python 中做到这一点?

这在 AWK 中非常强大,但我是 Ruby 新手,不知道你会怎么做。在 Python 中,我也找不到解决方案。

4

2 回答 2

2

红宝石:

str =
"drdxrdx
hoststatus {
host_name=myhost
modified_attributes=0
check_command=check-host-alive
check_period=24x7
notification_period=workhours
check_interval=5.000000
retry_interval=1.000000
event_handler=
}"
str.each_line do |line|
  print line if line =~ /hoststatus/..line =~ /\}/
end

这就是臭名昭著的触发器

于 2012-10-19T20:26:46.323 回答
1

使用 python 将 multiline 和 dotall 标志传递给 re. 这 ?跟随 * 使其不贪婪

>>> import re
>>> with open('test.x') as f:
...     print re.findall('^hoststatus.*?\n\}$', f.read(), re.DOTALL + re.MULTILINE)
于 2012-10-19T18:55:48.150 回答