Переваги файлу cat'ing та трубопроводів до грепа


17

Чи є додаткові переваги вибору файлу та перенесення його на файл grep, крім зручності? Зручність полягає в тому, що коли я отримую такі команди, як наведені нижче, з моєї історії, курсор знаходиться в кінці рядка, тому легко змінити команду з різним текстом, щоб підключити один і той же файл.

То які ще переваги можуть мати наступна конвенція:

cat /var/tmp/trace.2043925204.xt | grep -in profile
cat /var/tmp/trace.2043925204.xt | grep -n Profile-Main

замість:

grep -in profile /var/tmp/trace.2043925204.xt 
grep -n Profile-Main /var/tmp/trace.2043925204.xt 

Відповіді:


20

Краще уникати кота; написати це таким чином, якщо редагування рядків має значення:

$ < filename grep pattern

Причина полягає в тому, що передача всіх даних за допомогою кошти коштує пам'ять та ресурси процесора. Ще однією перевагою передачі імені файлу як аргументу, а не перенаправлення stdin є те, що він дозволяє команді можливість mmap () файлу.


8

Переваги немає. Ваш курсор в кінці також не має великого значення, якщо ви структуруєте його на зразок цього:< inputfile grep -args foo


7

Я не можу повірити , що ніхто не посилається «Марне Використання Cat» http://www.smallo.ruhr.de/award.html ще

Є одна сумнівна перевага. Якщо у вас довгий трубопровід, він виглядає трохи більше ортогонально з котом:

cat file | command1 | command 2 | command3

Він об'єднує всі команди разом.

Звичайно, як казали інші (і я це роблю)

< file command1 | command2 | command3

Виконує майже те саме. Однак це означає, що кішка є досить маленькою і не зводить ваш комп'ютер, якщо використовувати його, коли вам це не потрібно.

Зазвичай використання catvs прямого потрапляння на файл нічого не змінює, але це має значення для певних команд, які хвилюються, якщо в якості аргументів є декілька файлів, наприклад grep. Справа в точці:

cat file1 file2 | grep SOMETHING

матиме інший вихід, ніж

grep SOMETHING file1 file2

Які будуть відповідні назви файлів у висновку. Бувають випадки, коли я не хочу вживати імена файлів, і це перевага використання cat.


1
catнабагато зрозуміліше читати, ніж <. А може, просто для нас фоггеїв, які думають, що Unix та bash можуть багато чого навчитися з VMS та DCL.
РонДжон

5

Вам просто не потрібно використовувати кота в цій ситуації. Це зайве і марна трата часу, тому що такі інструменти, як grep, беруть назви файлів як аргументи.

[root@un1xf00 root]# time cat passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

real    0m0.021s
user    0m0.000s
sys     0m0.030s
[root@un1xf00 root]# time grep root passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

real    0m0.002s
user    0m0.000s
sys     0m0.000s
[root@un1xf00 root]#

Оновлення: Спасибі, @Andy Lester, що вказав, що ці таймінги не враховують кеш диска. Я дізнався щось нове! Але економія частки секунди все одно не має великого значення. Я просто думаю, що забивання кота в греп - це не логічний спосіб робити справи. Це як би попросити когось іншого допомогти вам у вирішенні проблеми, коли ви цілком здатні вирішити її самостійно.


@Michael: А -10 вам за тупість. Ви могли б бути кориснішими. Шкода, що ви цього не побачите, оскільки у вас тут немає облікового запису.
Денніс Вільямсон

4
Майкл каже, що зазначені вище терміни не враховують кеш диска. (і -0,29 для Денніса за те, що він більше зацікавлений в похитуванні Майкла, ніж дезатуювання відповіді)
Енді Лестер

1
Я гадаю, що якщо це повинен бути шум, а не сигнал, коментарі, це місце для цього. Дякую @Andy, як я не знав, Майкл мав на увазі дисковий кеш.
Джордж Джемпті

3

Простота редагування - єдина реальна перевага, і якщо ви це робите в командному рядку, будь-який додатковий час, який потрібно для запуску catта виконання труби, насправді не змінить.

Однак немає ніяких причин робити це в сценарії оболонки.


2

Користі взагалі немає. Замість того, щоб турбуватися про зміни команд, навчіться краще орієнтуватися в командному рядку оболонки за допомогою прискорювальних клавіш та ярликів.


1

Ні, і це може бути навіть повільніше повільним у прикладі, який ви даєте.

А pipeстворюється між cat і grep, що не потрібно при передачі імені файлу безпосередньо grep. Однак я не думаю, що за жодних обставин ви ніколи не будете дотримуватися обмежень пропускної здатності через це.

Інші переваги введення труб в grep включають додаткову обробку попередньої, наприклад, використання утиліт з більш розвиненими можливостями читання файлів. (Див. tee, zcatСеред інших).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.