4

次のようなAWKスタイルの範囲正規表現を実行したいと思います。

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

AWKでは、これにより、ファイル内の2つのパターン間のすべての行が出力されます。

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 に答える