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 здійснює пошук у повному командному рядку. Пропустіть його для пошуку лише імен.
man grepпрочитати сторінку посібника з посиланням на команду, або отримати додаткову інформацію про певні команди (включаючи греп) ви можетеinfo grep.... тобто. у вашій системі є документація, яка часто дуже зручна.