青山くんが教えてくれなかったので書きました。
require 'yaml'
kind = "ClusterRoleBinding".freeze
before = "rbac.authorization.k8s.io/v1beta1".freeze
after = "rbac.authorization.k8s.io/v1".freeze
Dir.glob("manifests/**/*").each do |f|
  next unless f =~ /yaml|yml/
  line_buff = []
  line_num = 0
  api_line = 0
  should_write = false
  File.foreach(f) do |line|
    line_num += 1
    api_line = line_num - 1 if line =~ /^apiVersion:\s+#{before}$/
    if line =~ /kind:\s*#{kind}$/ && api_line != 0
      line_buff[api_line] = "apiVersion: #{after}\n"
      should_write = true
    end
    api_line = 0 if line =~ /---/
    line_buff << line
  end
  IO.write(f, line_buff.join) if should_write
end
引数とってあれこれとかもいいんですけど、こういうの手元でパキパキ書き換えて実効するほうが好きなのでもし同じような事する人がいたらネタにしてくだしあというレベルのコードです。
いやー、絶対便利ツールあるよなぁとか思ったりもする。k8sのバージョンとマニフェストを引数に渡したらいい感じにvalidにしてくれるやつ。DaemonSetにselector必要になったりしたときただlabelsをコピペするだけ行とかやったもんなぁ。。