Saltar al contenido

cómo eliminar las líneas repetidas en emacs

Juan, parte de este staff, nos ha hecho el favor de crear este tutorial porque conoce perfectamente dicho tema.

Solución:

Si tiene Emacs 24.4 o más reciente, la forma más limpia de hacerlo sería la nueva delete-duplicate-lines función. Tenga en cuenta que

  • esto funciona en una región, no en un búfer, así que seleccione primero el texto deseado
  • mantiene el orden relativo de los originales, eliminando los duplicados

Por ejemplo, si su entrada es

test
dup
dup
one
two
one
three
one
test
five

M-x delete-duplicate-lines lo haría

test
dup
one
two
three
five

Tiene la opción de buscar desde atrás prefijándolo con el argumento universal (C-u). El resultado sería entonces

dup
two
three
one
test
five

El crédito va a emacsredux.com.

Otras opciones de rotonda, que no dan exactamente el mismo resultado, están disponibles a través de Eshell:

  1. sort -u; no mantiene el orden relativo de los originales
  2. uniq; peor, necesita que su entrada sea ordenada

Pon este código en tu .emacs:

(defun uniq-lines (beg end)
  "Unique lines in region.
Called from a program, there are two arguments:
BEG and END (region to sort)."
  (interactive "r")
  (save-excursion
    (save-restriction
      (narrow-to-region beg end)
      (goto-char (point-min))
      (while (not (eobp))
        (kill-line 1)
        (yank)
        (let ((next-line (point)))
          (while
              (re-search-forward
               (format "^%s" (regexp-quote (car kill-ring))) nil t)
            (replace-match "" nil nil))
          (goto-char next-line))))))

Uso:

M-x uniq-lines

En Linux, seleccione la región y escriba

M-| uniq 

El resultado sin duplicados está en un nuevo búfer.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *