Aku butuh sesuatu seperti:
grep ^"unwanted_word"XXXXXXXX
Anda juga dapat melakukannya dengan menggunakan -v
(untuk --invert-pertandingan
) pilihan grep sebagai:
grep -v "unwanted_word" file | grep XXXXXXXX
grep -v "unwanted_word" file
akan menyaring baris-baris yang memiliki unwanted_word
dan grep XXXXXXXX
akan menampilkan hanya baris dengan pola XXXXXXXX
.
EDIT:
Dari komentar anda terlihat seperti yang anda inginkan untuk menampilkan semua baris tanpa unwanted_word
. Dalam hal ini semua yang anda butuhkan adalah:
grep -v 'unwanted_word' file
Saya mengerti pertanyaan sebagai "Bagaimana saya mencocokkan kata, tetapi mengecualikan yang lain", yang salah satu solusinya adalah dua greps di seri: Pertama grep mencari ingin "word1", kedua grep tidak termasuk "word2":
grep "word1" | grep -v "word2"
Dalam kasus saya: saya perlu untuk membedakan antara "plot" dan "#plot" yang grep's "kata" opsi won't melakukan ("#" tidak menjadi alphanumerical).
Semoga ini bisa membantu.
Jika anda grep
mendukung Perl regular expression dengan -P
pilihan yang dapat anda lakukan (jika bash; jika tcsh anda'll perlu untuk melarikan diri !
):
grep -P '(?!.*unwanted_word)keyword' file
Demo:
$ cat file
foo1
foo2
foo3
foo4
bar
baz
Sekarang mari kita daftar semua foo
kecuali foo3
$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$
Solusi yang tepat adalah dengan menggunakan grep -v "kata" file
, dengan awk
setara:
awk '!/word/' file
Namun, jika anda kebetulan memiliki situasi yang lebih kompleks di mana anda inginkan, katakan, XXX
untuk muncul dan YYY
not untuk muncul, maka awk
datang berguna bukan perpipaan beberapa `grep ini:
awk '/XXX/ && !/YYY/' file
# ^^^^^ ^^^^^^
# I want it |
# I don't want it
Anda bahkan bisa mengatakan sesuatu yang lebih kompleks. Misalnya: saya ingin orang-baris yang mengandung XXX
atau YYY
, tetapi bukan ZZZ
:
awk '(/XXX/ || /YYY/) && !/ZZZ/' file
dll.
grep menyediakan '-v' atau '--invert-pertandingan' pilihan untuk memilih non-matching garis.
misalnya
grep -v 'unwanted_pattern' file_name
Ini akan menampilkan semua baris dari file file_name, yang tidak memiliki 'unwanted_pattern'.
Jika anda sedang mencari pola dalam beberapa file dalam satu folder, anda dapat menggunakan pencarian rekursif opsi sebagai berikut
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
Di sini grep akan mencoba untuk menampilkan semua kejadian 'wanted_pattern' di semua file dalam direktori saat ini dan menyebarkannya ke kedua grep untuk menyaring 'unwanted_pattern'. '|' - pipa akan memberitahu shell untuk menghubungkan output standar dari kiri program (grep -r 'wanted_pattern' *) ke standar input dari program (grep -v 'unwanted_pattern').