Вход для пользователей

Хорошие привычки #4: Перестаньте перенаправлять вывод cat

Изображение пользователя FraDe.

Простая но общая ошибка использования утилиты grep - перенаправление вывода утилиты cat в утилиту grep для поиска содержимого в файле. В этом нет никакой необходимости и это пустая трата времени, потому что утилита grep может брать имя файла в качестве аргумента. В этом случае просто незачем использовать cat:

Листинг 8. Пример хорошей привычки #10: Использования grep без cat

~ $ time cat tmp/a/longfile.txt | grep and
2811

real    0m0.015s
user    0m0.003s
sys     0m0.013s
~ $ time grep and tmp/a/longfile.txt
2811

real    0m0.010s
user    0m0.006s
sys     0m0.004s
~ $ 

Комментарии

Изображение пользователя oleg.

Цикл заметок прикольный, отдельные вещи не знал.
С интересом жду продолжения.

Изображение пользователя FraDe.

Заметки естественно не мои. Перевожу с английского. Переведу все. Выложу общим текстом со ссылкой на оригинал.

Изображение пользователя Grifon.

А ты проверяешь правильность команд? А то что-то с грепом мне кажется очень странным и не работающим примером

Изображение пользователя FraDe.

К сожалению пока пишу из винды, ибо на работе. Приду домой обязательно всё проверю.

Изображение пользователя FraDe.

проверил grep всё путем. вот тестовая строка:
grep hd /etc/fstab

Изображение пользователя Grifon.

Я не про просто греп, а про конкретные команды:
$ time cat tmp/a/longfile.txt | grep and 2811
В данном примере grep читает строки из стандартного ввода и из файла 2811

$ time grep and tmp/a/longfile.txt
2811

А тут что? выбираем строки, содержащие and, а получаем 2811. Простите, это как?
Я понимаю, что это всего лишь пример, но я считаю, что примеры должны быть правильными.

Изображение пользователя FraDe.

на самом деле косяк опять в верстке. в первом примере "2811" - должен находиться в новой строке.
это раз. а почему получаем 2811 действительно не понятно. Скорее всего автор имел ввиду что тут 2811 строк содержащих and и естественно выводить их не стал. Но в оригинале никаких пояснений по этому поводу.

Изображение пользователя Grifon.

FraDe wrote:
Скорее всего автор имел ввиду что тут 2811 строк содержащих and

Тогда тут вслывает ещё одна полезная команда wc:
grep and tmp/a/longfile.txt | wc -l
2811

Подсчитывает количество строк в файле tmp/a/longfile.txt, содердащих and

Изображение пользователя FraDe.

это я и имел ввиду.
А вот на эту тему как раз следующая хорошая привычка :) К сожалению перевести не успел еще но скажу сразу:
Листинг 10. Пример хорошей привычки #8: Подсчет строк используя и не используя grep

~ $ time grep and tmp/a/longfile.txt | wc -l
2811

real 0m0.097s
user 0m0.006s
sys 0m0.032s
~ $ time grep -c and tmp/a/longfile.txt
2811

real 0m0.013s
user 0m0.006s
sys 0m0.005s
~ $