teista son religiones rae quiénes que persona origen los informatica filosofia cree agnósticos agnóstico agnostico agnosticismo macos unix diff utilities

macos - son - diff agnóstico de línea final?



persona que no cree en religiones (7)

Como Jay dijo, Diff''nPatch parece lo que estás buscando. Alternativamente, puede convertir todas sus terminaciones de línea ''/ r'' en ''/ n'' en un solo comando como este:

sed -ie ''s//r//n/'' filename

o

find . | xargs -n1 sed -ie ''s//r//n/''

(Es posible que desee filtrar la lista de archivos de alguna manera en este último caso o se aplicará a todos los archivos en todos los subdirectorios).

Estoy trabajando en un Mac, con algunos archivos bastante viejos. Diferentes archivos fueron creados por diferentes programas, por lo que algunos terminan con / r (mac) y algunos con / n (unix). Quiero poder ejecutar comandos como diff, grep, etc. en estos archivos, pero los que tienen / r se tratan como una línea gigante. ¿Alguien sabe de una versión de diff, grep, etc. que funcione correctamente con todas las líneas nuevas?

ETA: también me gustaría que sean utilidades de Unix para que pueda usarlas en scripts, emacs, etc.


El comando dos2unix podría ser útil para convertir primero tus archivos a un formato consistente. Creo que está disponible para casi cualquier plataforma que se te ocurra y puede ejecutarse en muchos archivos a la vez. Creo que hay un paquete disponible para mac.


Si usa diff -w ignorará el espacio en blanco en los archivos, que probablemente sea suficiente para sus necesidades.

EDITAR : me acabo de dar cuenta de que leí mal la publicación la primera vez y que realmente está buscando una diferencia que funcione con terminaciones de línea. Mi sugerencia sería convertir los archivos con algo así como flip que pueda convertir los archivos a un formato estándar /n .

EDIT 2 : Acabo de encontrar algo que se parece a lo que quieres - Diff''nPatch :

Diff''nPatch es un puerto para Macintosh de las utilidades GNU ''diff'', ''patch'' y ''cmp''. Le permite comparar y encontrar diferencias entre dos archivos o carpetas, cotejar dos archivos, generar diffs en varios formatos (normal, contexto, unidiff, etc.), aplicar parches, comparar archivos byte a byte. Puede manejar cualquier tipo de terminaciones de línea (mac, Unix o Windows)


Utilicé la siguiente solución rápida, que tiene inconvenientes (ver a continuación):

1 : Haz una diferencia y enumera solo los nombres de archivo

diff -r -q dir1/ dir2/

2 : abra y guarde cada archivo listado con el editor que se usó, esto cambiará los finales de línea.

3 : Haz una diferencia regular

Inconvenientes incluyen:

  • menos robusto, propenso a errores
  • más trabajo si tienes muchos archivos

La utilidad diff incluida con OSX Lion tiene una opción ''strip-trailing-cr'' que hace lo que usted quiere. Lo usas así:

diff -cpt a.c b.c --strip-trailing-cr



El "ignorar el espacio en blanco" de la vista de diferencias de PHPStorm solo funciona . Ignora automáticamente las diferencias en el retorno de carro / EOL / newline / what-have-you. Puede perder el tiempo jugando con los comandos arcanos Unix o lo que sea, o simplemente puede obtener algo que realmente funciona y seguir adelante con la vida.

  • El uso de cualquiera de las soluciones mencionadas anteriormente falló en Mountain Lion (incluida la marcada como la respuesta correcta). Todos los enlaces de descarga para "Diff-npatch" fallaron. (Encontré http://webperso.easyconnect.fr/bdesgraupes/tools.html pero realmente no me gusta la idea de tener que recurrir al uso de una herramienta diff que no se puede invocar desde la línea de comandos y, por lo tanto, se integra con lo que sea La herramienta IDE o VCS que podría estar usando, como BBEdit, SourceTree o SmartSVN, todas las cuales, por cierto, no pasaron por alto las nuevas líneas con su herramienta de diferencias incorporada.

Sí, mis nuevas líneas son / r, pero ¿y qué? Arrr! Si el software es demasiado estúpido para darse cuenta de que / r == / n entonces solo voy a usar un software diferente que sea ​​lo suficientemente inteligente.

PHPStorm fue el único software que tenía una herramienta diff que "simplemente funcionó", que es lo que espero que haga el software Mac. Espero que el software Mac simplemente funcione . Utilizo una Mac para poder hacer mi trabajo en lugar de aprender los comandos de la terminal arcana en cada vuelta, que están casi todos mal documentados, esperando que entiendas cómo deben formatearse los comandos sin ningún ejemplo claro, por lo que nunca se sabe si lo estás haciendo mal o si el comando simplemente no funciona como todos los demás programas malos. Toma este ejemplo de "man diff":

-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE.

OK, entonces habiendo leído esto, no tengo idea de lo que significa. No hay un ejemplo de su uso. ¿Qué es "RE"? No dice en ninguna parte.

Luego está esta joya:

--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT. --line-format=LFMT Similar, but format all input lines with LFMT. --LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT. LTYPE is `old'', `new'', or `unchanged''. GTYPE is LTYPE or `changed''. GFMT may contain: %< lines from FILE1 %> lines from FILE2 %= lines common to FILE1 and FILE2 %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER LETTERs are as follows for new group, lower case for old group: F first line number L last line number N number of lines = L-F+1 E F-1 M L+1 LFMT may contain: %L contents of line %l contents of line, excluding any trailing newline %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number Either GFMT or LFMT may contain: %% % %c''C'' the single character C %c''/OOO'' the character with octal code OOO

No podría tener ningún sentido de este pasaje. ¿Cuál es la "entrada"? ¿Son ambos archivos o solo el archivo "para" o solo el archivo "de"? ¿A qué se refiere "similar"? ¿Qué significa "es" en la oración, "GFMT" es "LTYPE o` cambiado ''"? ¿Significa que "puede ser reemplazado por"? Si es así, ¿por qué no está "GFMT" entre comillas o corchetes, etc.? Como no se da ningún ejemplo, no hay forma de saberlo; la redacción de la documentación es totalmente ambigua. ¿Qué significa "GFMT puede contener" ... significa? ¿"Contener" significa que el texto que reemplaza el acrónimo GFMT puede contener eso? Sin un claro ejemplo, es completamente inútil.

¿Por qué siquiera molestarse en escribir una página de hombre si vas a hacerla tan críptica y ambigua que es inútil para cualquiera que no sepa cómo usar el software, básicamente? En ese punto, no es un manual; es solo una página de referencia rápida para los tipos que escribieron el software para que puedan recordar cómo usarlo. Supongo que suponen que solo leerá el código fuente si quiere saber qué es lo que realmente hace.

Mi tiempo es valioso Preferiría simplemente pagar el dinero para tener un software que realmente funcione correctamente y tenga la documentación adecuada.

Porque todos estos fallaron:

diff -d --strip-trailing-cr --ignore-all-space --from-file=rest.phtml test.phtml

... no se pudieron ignorar los caracteres.

diff -wd --strip-trailing-cr --ignore-all-space --from-file=rest.phtml test.phtml

... no se pudieron ignorar los caracteres.

diff -wd --suppress-common-lines --strip-trailing-cr --ignore-all-space --from-file=rest.phtml test.phtml

... no se pudieron ignorar los caracteres.

diff -wd test.phtml rest.phtml --suppress-common-lines --strip-trailing-cr --ignore-all-space

... no se pudieron ignorar los caracteres.

diff -awd test.phtml rest.phtml --suppress-common-lines --strip-trailing-cr --ignore-all-space

... no se pudieron ignorar los caracteres.

En ese caso, si fueran / n caracteres, también fallarían cuando se agregaran / n caracteres.

Donde test.phtml ==

foo

bar

y rest.html ==

foobar

El comando "diff" siempre te da algo como:

* 1,2 ** ! foo! bar / Sin nueva línea al final del archivo

--- 1 ----! foobar / No newline al final del archivo

... ¡fallar!