grep untuk string yang tidak diawali oleh string lain


10

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

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

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'

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

OP tidak meminta string menjadi satu-satunya yang ada di jalurnya.
enzotib
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.