Cuando usamos el comando sort file , el archivo muestra su contenido de forma ordenada, ¿qué pasa si no quiero obtener ningún tipo de salida sino un archivo ordenado?
El comando de sort imprime el resultado de la operación de clasificación en la salida estándar de forma predeterminada. Para lograr una ordenación "en el lugar", puede hacer esto:
sort -o file file Esto sobrescribe el file de entrada con la salida ordenada. El -o , utilizado para especificar una salida, está definido por POSIX , por lo que debería estar disponible en todas las versiones de sort :
-o Especifique el nombre de un archivo de salida que se utilizará en lugar de la salida estándar. Este archivo puede ser el mismo que uno de los archivos de entrada.
Si tiene la mala suerte de tener una versión de sort sin el interruptor -o ( Luis me asegura que existen), puede lograr una edición "en el lugar" de la manera estándar:
sort file > tmp && mv tmp filePuede usar la redirección de archivos para redirigir la salida ordenada:
sort input-file > output_file O puede usar la opción de clasificación -o , --output=FILE para indicar el mismo archivo de entrada y salida:
sort -o file fileSin repetir el nombre del archivo (con la expansión bash brace )
sort -o file{,} ⚠️ Nota: un error común es intentar redirigir la salida al mismo archivo de entrada (por ejemplo sort file > file ). Esto no funciona ya que el shell está haciendo las redirecciones (no el programa sort(1) ) y el archivo de entrada (que también es la salida) se borrará justo antes de darle al programa sort(1) la oportunidad de leerlo.
Para ordenar el archivo en su lugar, intente:
echo "$(sort your_file)" > your_file Como se explica en otras respuestas, no puede redirigir directamente la salida al archivo de entrada. Pero primero puede evaluar el comando de sort y luego redirigirlo al archivo original. De esta manera, puede implementar la ordenación en el lugar.
Del mismo modo, también puede aplicar este truco a otro comando como paste para implementar la adición por filas.
Aquí hay un enfoque que (ab) usa vim :
vim -c :sort -c :wq -E -s "${filename}" La porción -c :sort -c :wq invoca comandos a vim después de que se abre el archivo. -E y -s son necesarios para que vim se ejecute en un modo "sin cabeza" que no atrae a la terminal.
Esto casi no tiene beneficios sobre el método sort -o "${filename}" "${filename}" , excepto que solo toma el argumento del nombre de archivo una vez.
Esto me resultó útil para implementar una directiva de formatter en una entrada nanorc para archivos .gitignore . Esto es lo que usé para eso:
syntax "gitignore" "\.gitignore$" formatter vim -c :sort -c :wq -E -s¿Desea ordenar todos los archivos en una carpeta y subcarpeta anulándolos?
Utilizar esta:
find . -type f -exec sort {} -o {} \;sort file | sponge fileEsto está en el siguiente paquete de Fedora:
moreutils : Additional unix utilities Repo : fedora Matched from: Filename : /usr/bin/spongeNo hay respuestas sobre algunos archivos, entonces:
sort -u file1 file2 -o file1