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:
sort -u
; no mantiene el orden relativo de los originalesuniq
; 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)