docs: def sed_projects(regexpr, repl, force=False, recursive=True, user_profile=None, **kwargs):
      r"""
  
      Args:
          regexpr (?):
          repl (?):
          force (bool): (default = False)
          recursive (bool): (default = True)
          user_profile (None): (default = None)
  
      CommandLine:
          python -m utool.util_project --exec-sed_projects
  
      Example:
          >>> # DISABLE_DOCTEST
          >>> from utool.util_project import *  # NOQA
          >>> regexpr = ut.get_argval('--find', type_=str, default=sys.argv[-1])
          >>> repl = ut.get_argval('--repl', type_=str, default=sys.argv[-2])
          >>> force = False
          >>> recursive = True
          >>> user_profile = None
          >>> result = sed_projects(regexpr, repl, force, recursive, user_profile)
          >>> print(result)
  
      Ignore:
          regexpr = 'annotation match_scores'
          repl = 'draw_annot_scoresep'
  
      """
      # FIXME: finishme
      import utool as ut
      user_profile = ensure_user_profile(user_profile)
  
      sedkw = {}
      sedkw['exclude_dirs'] = user_profile.project_exclude_dirs
      sedkw['dpath_list'] = user_profile.project_dpaths
      sedkw['include_patterns'] = user_profile.project_include_patterns
      sedkw.update(kwargs)
  
      msg_list1 = []
      #msg_list2 = []
  
      print_ = msg_list1.append
      print_('Seding Projects')
      print(' * regular expression : %r' % (regexpr,))
      print(' * replacement        : %r' % (repl,))
      print_('sedkw = %s' % ut.repr4(sedkw, nl=True))
  
      print(' * recursive: %r' % (recursive,))
      print(' * force: %r' % (force,))
  
      # Walk through each directory recursively
      for fpath in ut.matching_fpaths(sedkw['dpath_list'],
                                      sedkw['include_patterns'],
                                      sedkw['exclude_dirs'],
                                      recursive=recursive):
          ut.sedfile(fpath, regexpr, repl, force)