code: def sed(regexpr, repl, force=False, recursive=False, dpath_list=None,
          fpath_list=None, verbose=None, include_patterns=None,
          exclude_patterns=[]):
      if include_patterns is None:
          include_patterns = ['*.py', '*.pyx', '*.pxi', '*.cxx', '*.cpp', '*.hxx', '*.hpp', '*.c', '*.h', '*.html', '*.tex']
      if dpath_list is None:
          dpath_list = [os.getcwd()]
      if verbose is None:
          verbose = ut.NOT_QUIET
      if fpath_list is None:
          greater_exclude_dirs = get_standard_exclude_dnames()
          exclude_dirs = []
          fpath_generator = matching_fpaths(
              dpath_list, include_patterns, exclude_dirs,
              greater_exclude_dirs=greater_exclude_dirs,
              recursive=recursive, exclude_patterns=exclude_patterns)
      else:
          fpath_generator = fpath_list
      if verbose:
          print('sed-ing %r' % (dpath_list,))
          print(' * regular expression : %r' % (regexpr,))
          print(' * replacement        : %r' % (repl,))
          print(' * include_patterns   : %r' % (include_patterns,))
          print(' * recursive: %r' % (recursive,))
          print(' * force: %r' % (force,))
          from utool import util_str
          print(' * fpath_list: %s' % (util_str.repr3(fpath_list),))
      regexpr = extend_regex(regexpr)
      num_changed = 0
      num_files_checked = 0
      fpaths_changed = []
      for fpath in fpath_generator:
          num_files_checked += 1
          changed_lines = sedfile(fpath, regexpr, repl, force, verbose=verbose)
          if changed_lines is not None:
              fpaths_changed.append(fpath)
              num_changed += len(changed_lines)
      import utool as ut
      print('num_files_checked = %r' % (num_files_checked,))
      print('fpaths_changed = %s' % (ut.repr3(sorted(fpaths_changed)),))
      print('total lines changed = %r' % (num_changed,))