Apa arti dan lakukan grep -v "grep"?

17

Saya bertanya-tanya apa grep -v "grep"artinya dan apa artinya?

Joe
sumber
8
Anda dapat man grepmembaca halaman manual referensi untuk perintah, atau untuk informasi lebih lanjut tentang perintah tertentu (termasuk grep) Anda dapat info grep.... mis. sistem Anda memiliki dokumentasi yang seringkali sangat berguna.
guiverc
12
grep -v "grep"sering digunakan untuk menyaring grep sendiri saat mendaftar proses dan yang biasanya melibatkan 3 jalur pipa, meskipun ada metode yang lebih baik tentu saja pgrepyang memungkinkan "pipa ledeng" jauh lebih sedikit. Lihat unix.stackexchange.com/q/74185/85039
Sergiy Kolodyazhnyy
13
Itu berhasil. Saya memanggil rootkit saya grep.
Joshua
Biasanya digunakan dalam konteks yang tidak terkait keamanan seperti di ps aux | grep fubar | grep -v grepmana fubarsesuatu yang saya kembangkan, yang telah berhenti merespons, dan yang id saya ingin temukan sehingga saya dapat membunuhnya. Asumsikan ada dua dari mereka jadi killalltidak pantas.
nigel222

Jawaban:

69

grep -v "grep"mengambil input baris demi baris, dan hanya output baris yang greptidak muncul. Tanpa -vitu, akan hanya output garis di mana grep tidak muncul. Lihat man grepdetailnya.

Sejauh menyangkut greputilitas itu sendiri, itu tidak penting bahwa pola grepditeruskan sebagai argumen adalah sama dengan namanya. Tetapi dalam kebanyakan kasus di mana grep -v grepsebenarnya muncul, ini bukan kebetulan.

grep -v grep(atau grep -v 'grep'atau grep -v "grep") sering muncul di sisi kanan pipa yang sisi kirinya adalah psperintah. Itu mungkin di mana Anda telah melihatnya. Sebagai contoh, saya mungkin sedang mencari menjalankan program yang nama, jalur, atau argumen baris perintah menyarankan mereka terkait dengan 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

grepPerintah saya ditunjukkan pada output, tetapi bukan itu yang saya cari. Saya mencari informasi tentang proses yang sudah berjalan ketika saya memeriksa apa yang sedang berjalan, bukan proses yang hanya berjalan karena upaya saya untuk memeriksa apa yang sedang berjalan.

Salah satu cara umum untuk menghilangkan gangguan ini adalah dengan menambahkan pipa lain ke 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

greptanpa -Fmemperlakukan polanya sebagai ekspresi reguler dan bukan string yang tetap . Jadi pendekatan lain adalah menulis ekspresi reguler yang sama persis xfcetetapi ditulis berbeda. Sebagai contoh:

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

Ini berfungsi karena [x]merupakan kelas karakter yang cocok persis dengan hurufnya x.


Salah satu kekurangan dari metode populer itu adalah mereka akan menyaring baris yang berisi grepbahkan ketika itu bukan grepperintah yang baru saja Anda jalankan sendiri. Mereka bahkan tidak mungkin grepperintah - perintah hanya yang namanya, jalur, atau argumen baris perintah mengandung grep . Jadi, seperti yang Sergiy Kolodyazhnyy tunjukkan , seringkali tidak satu pun dari cara-cara itu (atau pendekatan lain yang melibatkan pemipaan output ps) benar-benar ideal dan, seperti yang disebutkan Nic Hartley , cara lain sering digunakan . Sebagai contoh:pgrep

ek@Io:~$ pgrep -af xfce
2955 xfce4-power-manager
2958 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
  • -a menunjukkan baris perintah penuh. Abaikan untuk hanya menampilkan nomor ID proses.
  • -f mencari di baris perintah penuh. Hilangkan untuk mencari hanya nama.
Eliah Kagan
sumber
10
Mungkin juga layak disebut pgrepsebagai alternatif lainps | grep
Gugatan Dana Monica
8

grep --helpmemberi tahu kami apa yang -vdilakukan bendera:

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

Anda dapat menggunakan -vbendera untuk mencetak pertandingan yang terbalik; artinya, hanya cocok dengan baris yang tidak berisi kata yang diberikan. Misalnya, cetak semua baris yang tidak mengandung bilah kata:

$ grep -v bar /path/to/file

( baca selengkapnya ... )

Karlom
sumber