-L
es una característica útil de wc
, o eso pensé. Imprime la longitud de la línea más larga. Por alguna razón, expande un carácter de tabulación de un solo byte a una longitud de 8.
¿Hay alguna forma de configurar esto para que no "expanda" la ficha? ¿Y cuál podría ser la razón detrás de esta expansión?
echo -n $'\t' | wc -L
salidas 8
wc (GNU coreutils) 7.4
GNU bash, versión 4.1.5
text-processing
Peter.O
fuente
fuente
Respuestas:
No encuentro ningún informe de error relacionado con esto, y las siguientes líneas en el archivo fuente
wc.c
parecen elegir deliberadamente comportarse de esta manera, probablemente para dar una pista sobre el ancho necesario para mostrar el archivo en pantalla.
Una alternativa rápida podría ser
fuente
man wc
no menciona este problema, se afirma eninfo coreutils 'wc invocation'
(que 'man' también se refiere) ... Además, después de rastrear un poco más la esfera de Google, encontré esto como una alternativaecho -n $'\t' | expand -t1 | wc -L
, que es más o menos lo mismo que su alternativa, pero lo he incluido en buena medida ... Y aunque el siguiente enlace es una compilación wc hack * , puede ser de interés para algunos: soporte de wc para diferentes anchos de pestañaNormalmente, una pestaña se expande a la siguiente posición (divisible por 8) +1
[1, 9, 17, 25, ...]
, por lo que si la solicita, la obtiene.Tenga en cuenta que -n es irrelevante para la pregunta, pero $ no lo es.
devolverá 8 también, porque
Puede omitir $, si usa -e para echo:
Entonces, si desea contar el '\ t' como un solo byte, simplemente omita -e y $:
fuente
echo '\t'
, no genera un tab-char (\ x09). Produce una línea cuya longitud es 2, es decir. ay'\'
a't'
. Una nueva línea no es parte de la longitud de una línea ... (En-n
mi ejemplo, tenía que verificar siwc
procesaría correctamente un archivo que no tiene un carácter de línea nueva ...)wc --help
dice:-L, --max-line-length print the length of the longest line?
. No habla de bytes, sino de longitudes de línea.echo -e foo'\t'bar | wc -L
cuál resulta en 11, no en 14.foo\tbar
ejemplo anterior ,wc
ha asumido tabulaciones en un espacio nominal de 8 ... El siguiente ejemplo muestra cómowc
ignora la configuración de tabulación activa actualmente. Emite una línea al terminal que tiene 8 columnas de ancho / largo, perowc
informa que es 11. Este ejemplo establece tabulaciones en cada 6ta columna ...tabs -6; echo 12345678; echo -e "foo\tbar"|tee >(wc -L)
La descripción de wc -L era ambigua. Devuelve el ancho de pantalla más ancho. Para controlar la expansión de pestañas, puede filtrar
expand
primero.fuente