Escape double quote ใน grep


96

ฉันต้องการทำ grep สำหรับคำหลักที่มีเครื่องหมายคำพูดคู่อยู่ข้างใน ยกตัวอย่างง่ายๆดังนี้

echo "member":"time" | grep -e "member\""

ที่ไม่ตรงกัน จะแก้ไขได้อย่างไร?

คำตอบ:


139

ปัญหาคือคุณไม่สามารถหลีกเลี่ยงสตริงอินพุตได้อย่างถูกต้องให้ลอง:

echo "\"member\":\"time\"" | grep -e "member\""

หรือคุณสามารถใช้เครื่องหมายคำพูดคู่ที่ไม่ใช้ Escape ภายในเครื่องหมายคำพูดเดียว:

echo '"member":"time"' | grep -e 'member"'

เป็นเรื่องของความชอบที่คุณจะพบได้ชัดเจนแม้ว่าแนวทางที่สองจะป้องกันไม่ให้คุณซ้อนคำสั่งของคุณไว้ในเครื่องหมายคำพูดเดี่ยวชุดอื่น (เช่นssh 'cmd')


1
จะได้ผลไหม echo '"member":"time"' |grep -e "member"ไม่ได้ทดสอบ
มด

เกือบ. echo '"member":"time"' |grep -e 'member"'จะต้องมี ทั้งสองวิธีนั้นใช้ได้ แต่ฉันชอบการหลบหนีอย่างชัดเจนเนื่องจากเจตนานั้นชัดเจนกว่า
cmh

ใช่อาจแก้ไขคำตอบของคุณถ้าคุณชอบใครบางคนอาจชอบสิ่งนี้ (+1)
ant

สิ่งนี้ (โดยใช้แบ็กสแลช) ใช้ไม่ได้กับ Windows สำหรับฉัน จริงๆแล้วมันใช้งานได้บางส่วน แต่ฉันไม่สามารถเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์ได้
Radim Cernej

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