распечатать остаток ввода вместе с соответствующей строкой - PullRequest
0 голосов
/ 08 марта 2020

Я новичок в linux и экспериментирую с базовыми c терминальными командами. Я обнаружил, что могу перечислить всех пользователей, используя compgen -u, но что, если я хочу отображать только выходные данные? Хорошо, скажем, вывод compgen -u выглядит следующим образом:

extra
extra
extra
extra
extra
extra
extra
extra
extra
John
William
Kate
Harold

Я могу использовать только grep, чтобы найти один текст (например, compgen -u | grep John). Но что, если я хочу использовать grep для отображения Джона, а также всех оставшихся после него записей?

Ответы [ 3 ]

1 голос
/ 08 марта 2020

sed или awk решение будет проще, но если вы можете использовать только grep, тогда опция --after-context (или -A) может сделать:

grep -A 5 John file

недостатком является то, что вам нужно знать количество строк, отображаемых после сопоставления (или использовать произвольное большое число для остальной части файла).

0 голосов
/ 09 марта 2020

Вы можете использовать следующую однострочную строку:

n=$( compgen -u | grep -n John | head -1 | cut -d ":" -f 1 ) && compgen -u | tail -n +$n

Это определяет номер строки при первом появлении Джона и печатает все, начиная с этой строки.

0 голосов
/ 09 марта 2020

compgen -u | grep -A$(compgen -u| wc -l) John

Объяснение:

From man grep

       -A NUM, --after-context=NUM
                  Print NUM lines of trailing context after matching lines.  Places a line containing a group separator (described under --group-separator) between
                  contiguous groups of matches.
    grep -A -- print number of rows after pattern 

    $() -- Execute unix command 

    compgen -u|  wc -l --> Get total number of rows of output of command. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...