Що означає і робити "grep"?


17

Мені було цікаво, що grep -v "grep"робить і що це означає?


8
Ви можете man grepпрочитати сторінку посібника з посиланням на команду, або отримати додаткову інформацію про певні команди (включаючи греп) ви можете info grep.... тобто. у вашій системі є документація, яка часто дуже зручна.
guiverc

12
grep -v "grep"часто використовується для фільтрації грепу під час переліку процесів, і це, як правило, включає 3 трубопроводи, хоча є кращі методи, як, звичайно, pgrepякі дозволяють набагато менше "сантехніки". Дивіться unix.stackexchange.com/q/74185/85039
Сергій Колодяжний

13
Це робить це. Я телефоную своєму руткіту grep.
Джошуа

Зазвичай використовується в контексті, що не стосується безпеки, наприклад, ps aux | grep fubar | grep -v grepде fubarя щось розвиваю, що перестало реагувати, і чий ідентифікатор я хочу знайти, щоб я міг його вбити. Припустимо, їх є два, тому killallнедоцільно.
nigel222

Відповіді:


69

grep -v "grep"приймає рядок введення за рядком і виводить лише ті рядки, в яких grepне відображається. Без -vцього він виводить лише ті рядки, у яких grep вони з'являються. Детальніше man grepдив.

Що стосується самої grepутиліти, то неважливо, що шаблон, grepпереданий їй як аргумент, такий самий, як і його ім'я. Але в більшості випадків, де grep -v grepнасправді з'являється, це не випадково.

grep -v grep(або grep -v 'grep'або grep -v "grep") часто з’являється з правого боку труби , ліва сторона якої є psкомандою. Це, мабуть, там, де ви це бачили. Наприклад, я, можливо, шукаю запущені програми, чиї імена, шляхи чи аргументи командного рядка підказують, що вони пов'язані з Xfce:

ek@Io:~$ ps x | grep xfce
 2955 ?        Ssl    0:10 xfce4-power-manager
 2958 ?        S      0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
31901 pts/1    S+     0:00 grep --color=auto xfce

Моя grepкоманда була показана у висновку, але це не те, що я шукаю. Я шукаю інформацію про процеси, які вже запущені, коли я вивчав, що працює, а не процес, який працює лише через мої зусилля, щоб вивчити, що працює.

Один із поширених способів усунення цього відволікання - додати ще одну трубу до grep -v grep:

ek@Io:~$ ps x | grep xfce | grep -v grep
 2955 ?        Ssl    0:10 xfce4-power-manager
 2958 ?        S      0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd

grepбез -Fтрактування свого шаблону як регулярного виразу, а не фіксованого рядка . Отже, інший підхід - написати регулярний вираз, який точно відповідає, xfceале пишеться по-іншому. Наприклад:

ek@Io:~$ ps x | grep '[x]fce'
 2955 ?        Ssl    0:10 xfce4-power-manager
 2958 ?        S      0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd

Це працює, тому що [x]це клас символів, який відповідає саме букві x.


Одним із недоліків цих популярних методів є те, що вони відфільтрують рядки, які містять grepнавіть тоді, коли вони не є grepкомандою, яку ви просто запустили. Вони можуть бути навіть не grepкомандами - просто командами, чиї імена, шляхи чи аргументи командного рядка містять grep . Отже, як зазначив Сергій Колодяжний , часто жоден із цих способів (ані будь-який інший підхід, що передбачає встановлення результатів ps), є справді ідеальним, і, як згадував Нік Хартлі , часто використовуються інші способиpgrep . Наприклад:

ek@Io:~$ pgrep -af xfce
2955 xfce4-power-manager
2958 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
  • -a показує повний командний рядок. Пропустіть його, щоб показати лише ідентифікаційний номер процесу.
  • -f здійснює пошук у повному командному рядку. Пропустіть його для пошуку лише імен.

10
Можливо, варто також згадати pgrepще одну альтернативуps | grep
Позов Моніки

8

grep --help розповідає, що -v прапор робить:

-v, --invert-match        select non-matching lines

Можна використовувати -v прапор для друку інвертування відповідності; тобто він відповідає лише тим рядкам, які не містять заданого слова. Наприклад, надрукуйте весь рядок, що не містить рядка слів:

$ grep -v bar /path/to/file

( детальніше ... )

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