Я хотел бы получить список, исключая первые 2 строки

$ pip list
Package                            Version  
---------------------------------- ---------
alabaster                          0.7.10   
anaconda-client                    1.6.9    
anaconda-navigator                 1.7.0    
anaconda-project                   0.8.2    
appnope                            0.1.0    
appscript                          1.0.1    
asn1crypto                         0.24.0   
astroid                            1.6.1    
astropy                            2.0.3    
attrs                              17.4.0   

Как отрезать первые две строки, например:

pip list | cut line=2
0
Inian 3 Май 2018 в 10:14
1
awk 'NR>2' file...
 – 
jasonwryan
3 Май 2018 в 10:08

2 ответа

Лучший ответ

Просто с помощью команды sed:

pip list | sed '1,2d'

Объяснение: Команда sed удаляет (d) строк в диапазоне от 1 до 2 (и выводит все остальное).

Или awk:

pip list | awk 'NR > 2'

Объяснение: Программа awk выводит все, начиная с строки 3.

awk будет особенно полезен, если вы планируете выполнить дальнейший анализ этого вывода, например, извлечение только имен пакетов:

pip list | awk 'NR > 2 { print $1 }'

Команда cut, которую вы упомянули в вопросе (без учета того, что используемая семантика неверна), не обрезает строки. Ну да, но он вырезает поля из строк.

2
Kusalananda 3 Май 2018 в 11:26
На самом деле, с GNU cut можно сделать seq 20 | cut -d$'\n' -f3-
 – 
Stéphane Chazelas
3 Май 2018 в 10:47
Это обрабатывает весь файл как набор полей с разделителями \n в одной строке, поэтому в некотором смысле это все еще вырезает поля из строки, но да.
 – 
Kusalananda
3 Май 2018 в 10:49
Преимущество использования tail, помимо того факта, что он будет более эффективным, поскольку это простой инструмент, предназначенный для этой задачи, заключается в том, что в большинстве реализаций, включая не-GNU, он будет работать даже с нетекстовым вводом. (например, с очень длинными строками, с NUL или последовательностями байтов, которые не образуют допустимых символов...), в то время как некоторые реализации sed или awk задохнулись бы от них.
 – 
Stéphane Chazelas
3 Май 2018 в 10:50
Единственная причина, по которой я не упомянул хвост, заключалась в том, что он уже упоминался в другом ответе.
 – 
Kusalananda
3 Май 2018 в 11:06
1
Да, я в этом не сомневаюсь. Эти комментарии были просто дополнительными примечаниями, а не критикой вашего ответа.
 – 
Stéphane Chazelas
3 Май 2018 в 11:15

Просто с помощью команды tail:

pip list | tail -n+3 -
  • из подписи tail tail [OPTION]... [FILE]... - когда FILE равно -, читать стандартный ввод
  • -n, --lines=[+]NUM - вывести последние NUM строк вместо последних 10; или используйте -n +NUM для вывода, начиная со строки NUM
5
RomanPerekhrest 3 Май 2018 в 10:20