Справочник по консольным командам Toybox для Android 12


  Ver.0.8.4     Ver.0.8.9     Pending  

Путь: Toys/POSIX, команды версии: Ver.4     Ver.9


nl

Комментарии в файле nl.c :

usage: nl [-E] [-l #] [-b MODE] [-n STYLE] [-s SEPARATOR] [-v #] [-w WIDTH] [FILE...]

Количество строк ввода.
  • -E Использовать расширенный синтаксис регулярных выражений (при выполнении -b pREGEX)
  • -b Какие строки нумеровать: a (все) t (непустые, по умолчанию) pREGEX (шаблон)
  • -l Считать только последние из этого множества последовательных пустых строк
  • -n СТИЛЬ номеров: ln (выравнивание по левому краю) rn (выравнивание по правому краю) rz (нулевой знак)
  • -s Разделитель для использования между числом и строкой (вместо TAB)
  • -v Начальный номер строки для каждого раздела (по умолчанию 1)
  • -w Ширина номеров строк (по умолчанию 6)

  • usage: nl [-E] [-l #] [-b MODE] [-n STYLE] [-s SEPARATOR] [-v #] [-w WIDTH] [FILE...]

    Number lines of input.
  • -E Use extended regex syntax (when doing -b pREGEX)
  • -b Which lines to number: a (all) t (non-empty, default) pREGEX (pattern)
  • -l Only count last of this many consecutive blank lines
  • -n Number STYLE: ln (left justified) rn (right justified) rz (zero pad)
  • -s Separator to use between number and line (instead of TAB)
  • -v Starting line number for each section (default 1)
  • -w Width of line numbers (default 6)

  • Исходный текст в файле nl.c

    #define FOR_nl
    #include "toys.h"
    
    GLOBALS(
      char *s, *n, *b;
      long w, l, v;
    
      // Count of consecutive blank lines for -l has to persist between files
      long lcount, slen;
    )
    
    static void do_nl(char **pline, long len)
    {
      char *line;
      int match = *TT.b != 'n';
    
      if (!pline) return;
      line = *pline;
    
      if (*TT.b == 'p') match = !regexec((void *)(toybuf+16), line, 0, 0, 0);
      if (TT.l || *TT.b == 't')
        if (*line == '\n') match = TT.l && ++TT.lcount >= TT.l;
      if (match) {
        TT.lcount = 0;
        printf(toybuf, TT.w, TT.v++, TT.s);
      } else printf("%*c", (int)(TT.w+TT.slen), ' ');
      xprintf("%s", line);
    }
    
    void nl_main(void)
    {
      char *clip = "";
    
      if (!TT.s) TT.s = "\t";
      TT.slen = strlen(TT.s);
    
      if (!TT.n || !strcmp(TT.n, "rn")); // default
      else if (!strcmp(TT.n, "ln")) clip = "-";
      else if (!strcmp(TT.n, "rz")) clip = "0";
      else error_exit("bad -n '%s'", TT.n);
    
      sprintf(toybuf, "%%%s%s", clip, "*ld%s");
    
      if (!TT.b) TT.b = "t";
      if (*TT.b=='p' && TT.b[1])
        xregcomp((void *)(toybuf+16), TT.b+1, REG_NOSUB|FLAG(E)*REG_EXTENDED);
      else if (!TT.b[0] || TT.b[1] || !strchr("atn", *TT.b))
        error_exit("bad -b '%s'", TT.b);
    
      loopfiles_lines(toys.optargs, do_nl);
    }