grep สำหรับสตริงที่ไม่ได้นำหน้าด้วยสตริงอื่น


คำตอบ:


9

สิ่งนี้สามารถแก้ไขได้โดยใช้นิพจน์ทั่วไปที่มีค่าลบเชิงลบ (ซึ่งได้รับการสนับสนุนการทดลองgrepตามที่ระบุไว้โดยความคิดเห็นจากการจัดการ):

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

เนื่องจากการสนับสนุนเป็นเพียงการทดลองคุณอาจต้องการใช้perlแทน:

$ perl -nle 'print if /(?<!Mr )John Smith/' file

ได้รับการสนับสนุนในการทดลองgrepecho $string | grep -P '(?<!Mr )John Smith' :
จัด

@ จัดเรียงแน่นอน ขอบคุณฉันจะอัปเดตคำตอบ
jcollado

6

คุณสามารถดำเนินการ

command | grep 'John Smith' | grep -v 'Mr John Smith'

1
เป็นความคิดที่ดี แต่จะไม่ทำงานหากมีJohn Smith Mr John Smith John Smith
Ron

1

หากต้องการใช้นิพจน์ทั่วไปให้ใช้ ^ และ $

grep "^John Smith$"

^ คือการแข่งขันจากจุดเริ่มต้น $ คือการแข่งขันจากจุดสิ้นสุด

ไวยากรณ์จะแตกต่างกันไปขึ้นอยู่กับสิ่งที่คุณกำลังค้นหาในไฟล์อะไร

คุณสามารถใช้นิพจน์ทั่วไปด้วย sed, grep, awk ....

ตัวอย่าง

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

bodhi@Ubuntu:~ grep "^John Smith$" file
John Smith

OP ไม่ขอให้สตริงเป็นสิ่งเดียวในบรรทัด
enzotib
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.