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
.... тобто. у вашій системі є документація, яка часто дуже зручна.