가져온 게시글에서 이메일 주소 제거하기

안녕하세요 모두

현재 메일링 리스트를 사용하고 있는 조직용 Discourse 인스턴스를 설정하고 있습니다. 메일(20K 메시지)을 주요 문제 없이 가져왔지만, 인용, 메일 서명 등으로 인해 사람들의 이메일 주소가 표시되는 게시글이 매우 많습니다.

저는 rake/rails 명령줄에 대해 상당히 익숙하지만, 이러한 이메일 주소를 제거하는 방법을 찾지 못해 고전하고 있습니다. 정규식과 비정규식을 포함한 다양한 형식을 시도해 보았지만, 게시글을 찾지 못합니다.

rake posts:remap["\<vincent@domain\.com\>","","regex"]
rake posts:remap["\\<vincent@domain\\.com\\>","","regex"]

더 나은 방법이 있을까요? 우선 제 자신의 주소를 찾기 위해 간단한 정규식으로 시작했습니다. (그리고 네, 백업은 가지고 있습니다!)

이것은 새로운 Discourse 인스턴스이므로 @ 멘션 등을 제거하는 것에 대해서는 걱정하지 않습니다.

감사합니다.

@pfaffman이 우리를 위해 작성해 준 간단한 스크립트입니다. 저질스러운 부분은 제가 수정한 부분입니다. 필요하지 않을 수도 있는 몇 가지 기능이 포함되어 있는데, 예를 들어 특정 날짜 이전의 게시글에서만 이메일 주소를 제거하도록 하는 절단 날짜(cutoff date)가 있습니다.

전체적으로 제거하는 것보다 주소를 'email@removed.com’으로 대체하는 것이 가장 좋았습니다. 왜 그랬는지 기억이 나지 않지만, 주변 괄호와 더 잘 어울렸던 것 같습니다.

def remove_email_addresses
  n=0 
  test_mode=false 
  dt=DateTime.new(2019, 1, 1, 0, 0, 0) 
  no_emails="email@removed." 
  Post.where("raw like '%@%'").find_each do |post| 
    sleep 0.1 
    if post.created_at < dt 
      post.raw.gsub!(/[a-z0-9+-_.]+@[a-z0-9+-]+[. ,;\\]/i,no_emails) 
      if test_mode 
        puts post.raw 
        sleep 10 
      end 
      post.save unless test_mode 
      post.rebake! unless test_mode 
      puts "saved" 
      n+=1 
      puts n.to_s 
    else 
      puts "new post, leaving as-is" 
    end 
  end 
  nil 
end

> remove_email_addresses

정말 감사합니다. 한번 시도해 보겠습니다.