Оператор перенаправления, стандартный ввод и параметры команды [дубликат]

GNUcomm(a partir de GNU coreutils 8.25 )ahora tiene una opción -z/ --zero-terminatedpara eso.

Para versiones anteriores de GNU comm, debería poder intercambiar NUL y NL:

comm -13 <(cd dir1 && find. -type f -print0 | tr '\n\0' '\0\n' | sort) \
         <(cd dir2 && find. -type f -print0 | tr '\n\0' '\0\n' | sort) |
  tr '\n\0' '\0\n'

De esa manera commtodavía funciona con registros delimitados por saltos de línea -, pero con saltos de línea reales en la entrada codificada como NUL, por lo que todavía estamos seguros con nombres de archivo que contienen saltos de línea.

Es posible que también desee establecer la configuración regional en Cporque en los sistemas GNU y la mayoría de las configuraciones regionales UTF -8 al menos, hay diferentes cadenas que se ordenan de la misma manera y causarían problemas aquí¹.

Ese es un truco muy común (ver Invertir líneas coincidentes, NUL -separado para otro ejemplo con comm), pero necesita utilidades que admitan NUL en su entrada, que fuera de los sistemas GNU es relativamente raro.


¹ Ejemplo:

$ touch dir1/{①,②} dir2/{②,③}
$ comm -12 <(cd dir1 && find. -type f -print0 | tr '\n\0' '\0\n' | sort) \
           <(cd dir2 && find. -type f -print0 | tr '\n\0' '\0\n' | sort)  
./③
./②
$ (export LC_ALL=C
    comm -12 <(cd dir1 && find. -type f -print0 | tr '\n\0' '\0\n' | sort) \
             <(cd dir2 && find. -type f -print0 | tr '\n\0' '\0\n' | sort))
./②

(Edición de 2019:El orden relativo de ①②③ se ha corregido en las versiones más nuevas de GNU libc, pero puede usar en su lugar, por ejemplo, en versiones más nuevas (2.30 al menos )que todavía tienen el problema como 95 % de puntos de código Unicode)

6
21.07.2019, 14:18
0 ответов

Теги

Похожие вопросы