grep untuk string yang tidak diawali oleh string lain

10

Apakah mungkin, menggunakan grep, untuk mencari contoh John Smithtetapi mengecualikan contoh Mr John Smith?

Sam Hastings
sumber

Jawaban:

9

Ini dapat diselesaikan dengan menggunakan ekspresi reguler dengan tampilan negatif (yang secara eksperimental didukung grepseperti yang ditunjukkan oleh komentar dari aransemen):

$ grep -P '(?<!Mr )John Smith' file

Karena dukungannya hanya eksperimental, Anda mungkin ingin menggunakannya perlsebagai gantinya:

$ perl -nle 'print if /(?<!Mr )John Smith/' file
jcollado
sumber
Hal ini secara eksperimental didukung dalam grep : echo $string | grep -P '(?<!Mr )John Smith'.
mengatur
@ Atur Memang. Terima kasih, saya akan memperbarui jawabannya.
jcollado
6

Anda bisa mengeksekusi

command | grep 'John Smith' | grep -v 'Mr John Smith'
enzotib
sumber
1
Gagasan yang bagus, tetapi tidak akan berfungsi jika salurannyaJohn Smith Mr John Smith John Smith
Ron
1

Untuk menggunakan ekspresi reguler, gunakan ^ dan $

grep "^John Smith$"

^ cocok dari awal $ cocok dari akhir.

Sintaks akan bervariasi tergantung pada apa yang Anda cari dalam file apa.

Anda dapat menggunakan ekspresi reguler dengan sed, grep, awk ....

Contoh

bodhi@Ubuntu:~ cat file
Mr John Smith
John Smith
John
Smith

bodhi@Ubuntu:~ grep "^John Smith$" file
John Smith
Harimau kumbang
sumber
OP tidak meminta string menjadi satu-satunya yang ada di jalurnya.
enzotib