nl (skrót od number lines) numeruje linie pliku i wypisuje je na standardowe wyjście razem z numerem na początku. To taki bardziej rozgarnięty kuzyn cat -n: domyślnie pomija puste linie przy numerowaniu, pozwala ustawić format numeru, separator, szerokość kolumny i punkt startowy. Przydaje się, gdy chcesz odnieść się do konkretnej linii kodu, logu albo konfiguracji, a nie liczyć ich palcem na ekranie.
Składnia i najważniejsze opcje
Podstawowa składnia wygląda tak: nl [opcje] [plik...]. Bez podanego pliku (albo gdy podasz -) nl czyta ze standardowego wejścia, więc spokojnie wepniesz go w potok.
-b STYL— sposób numerowania linii treści:a(wszystkie),t(tylko niepuste — domyślnie),n(żadne),pWZORZEC(tylko pasujące do wyrażenia regularnego).-n FORMAT— format numeru:ln(do lewej),rn(do prawej, domyślnie),rz(do prawej z zerami wiodącymi).-s ŁAŃCUCH— co wstawić między numerem a treścią (domyślnie znak tabulacji).-w LICZBA— szerokość kolumny z numerem (domyślnie 6).-v LICZBA— od jakiego numeru zaczynać (domyślnie 1).-i LICZBA— krok numerowania, czyli o ile zwiększać numer (domyślnie 1).-l LICZBA— ile kolejnych pustych linii liczyć jako jedną.
Przykłady użycia
nl plik.txt— numeruje tylko niepuste linie pliku i wypisuje wynik na ekran.nl -b a plik.txt— numeruje wszystkie linie, łącznie z pustymi (zachowuje się jakcat -n).nl -n rz -w 3 plik.txt— wyrównuje numery do prawej z zerami wiodącymi w polu o szerokości 3 (np.001,002).nl -s '. ' -w 1 lista.txt— robi z pliku ładną listę w stylu1. tekstzamiast tabulacji.grep -n "" log.txt | tail -20przefiltrujesz, ale do samego pliku:nl -b a -v 100 plik.txt— numeruje wszystkie linie zaczynając od 100.
Częste błędy i pułapki
Najczęstsza niespodzianka: domyślnie nl nie numeruje pustych linii (styl t), więc numery mogą się rozjeżdżać z rzeczywistym numerem wiersza w edytorze. Jeśli chcesz odwzorować numerację 1:1, użyj -b a.
Druga sprawa: numer i treść rozdziela domyślnie tabulator, a nie spacja. Przy kopiowaniu do dokumentów potrafi to wyglądać dziwnie — zmień separator przez -s.
Pamiętaj też, że nl liczy linie w obrębie tak zwanych stron logicznych oddzielonych specjalnymi znacznikami (\:, \:\: itd.). W zwykłych plikach tego nie spotkasz, ale jeśli numeracja nagle „resetuje się”, sprawdź, czy w treści nie ma takich sekwencji. Na macOS (BSD) część zachowań i domyślnych wartości może się minimalnie różnić od wersji GNU z Linuksa, więc przy skryptach przenośnych lepiej jawnie podać opcje.
Powiązane komendy: cat -n, grep -n, awk, sed, pr.