-L
jest przydatną funkcją wc
, a przynajmniej tak myślałem. Drukuje długość najdłuższej linii. Z jakiegoś powodu rozszerza jednobajtowy tab-char do długości 8.
Czy istnieje jakiś sposób, aby ustawić to, aby nie „rozszerzać” tabulatora? i jakie może być uzasadnienie tego rozszerzenia?
echo -n $'\t' | wc -L
wyjścia 8
wc (GNU coreutils) 7.4
GNU bash, wersja 4.1.5
text-processing
Peter.O
źródło
źródło
Odpowiedzi:
Nie znalazłem powiązanego z tym zgłoszenia błędu i następujących wierszy w pliku źródłowym
wc.c
wydają się celowo wybierać takie zachowanie, prawdopodobnie podając wskazówkę dotyczącą szerokości potrzebnej do wyświetlenia pliku na ekranie.
Szybka alternatywa może być
źródło
man wc
nie wspomina o tym problemie, jest to określone winfo coreutils 'wc invocation'
(który odnosi się również do „człowieka”) ... Ponadto, po dokładniejszym przeszukaniu sfery Google, znalazłem to jako alternatywęecho -n $'\t' | expand -t1 | wc -L
, który jest prawie taki sam, jak twoja alternatywa, ale wrzuciłem go w dobrym celu .. I chociaż poniższy link to rekompilacja hacka wc * , może być interesujące dla niektórych: obsługa wc dla różnych szerokości tabulatorówZwykle karta jest rozwijana do następnej pozycji (podzielna przez 8) +1
[1, 9, 17, 25, ...]
, więc jeśli poprosisz o nią, otrzymasz ją.Zauważ, że -n nie ma znaczenia dla pytania, ale $ nie.
zwróci również 8, ponieważ
Możesz pominąć $, jeśli używasz -e dla echa:
Więc jeśli chcesz policzyć „\ t” jako pojedynczy bajt, po prostu pomiń -e i $:
źródło
echo '\t'
nie wyświetla tab-char (\ x09). Wyprowadza linię o długości 2, tj. a'\'
i a't'
. Nowa linia nie jest częścią długości linii ... (-n
W moim przykładzie miałam do sprawdzenia, czywc
poprawnie przetworzy plik, który nie ma końcowego znaku nowej linii ...)wc --help
mówi:-L, --max-line-length print the length of the longest line?
. Nie mówi o bajtach, ale o długości linii.echo -e foo'\t'bar | wc -L
które wyniki dają 11, a nie 14foo\tbar
przykładzie,wc
nie zakłada tab-zatrzymuje się przy nominalnym rozstawie 8 ... Poniższy przykład pokazuje w jaki sposóbwc
ignoruje aktualnie aktywne ustawienia tab-stop. Wyprowadza wiersz do terminala, który ma szerokość / długość 8 terminali-kolumn, alewc
zgłasza, że to 11. Ten przykład ustawia tabulatory w każdej 6-tej kolumnie ...tabs -6; echo 12345678; echo -e "foo\tbar"|tee >(wc -L)
Opis wc -L był niejednoznaczny. Zwraca najszerszą szerokość wyświetlania. Aby kontrolować rozwijanie kart, możesz
expand
najpierw przefiltrować .źródło