grep ทำตัวต่างกันกับ Fedora กับ Ubuntu


13

ดังนั้นเมื่อฉันเรียกใช้สิ่งนี้ใน Fedora ฉันเห็นสิ่งนี้:

$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles  2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'
2R-ref.alleles

แต่เมื่อฉันทำงานบน Ubuntu (ข้อมูลเดียวกัน) ฉันไม่ได้รับผลลัพธ์ใด ๆ จาก grep:

$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles  2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'

ความคิดใด ๆ ที่อาจเกิดขึ้น? ฉันจะหาบางสิ่งที่จะทำงานเหมือนกันทั้งสองระบบได้อย่างไร


แล้วไงls *-ref.allelesล่ะ
เกล็นแจ็

@glennjackman ฉันคิดว่า แต่มีคนทำอย่างนั้นและแสดงความคิดเห็นในบรรทัดทุบตีสคริปต์ฉันพยายามที่จะแก้ไข :-) ฉันสามารถสันนิษฐานได้ว่าพวกเขามีเหตุผล ...
Greg_the_Ant

คำตอบ:


30
grep -F '-ref.alleles'

เทียบเท่ากับ:

grep -F -ref.alleles

(ไม่มีตัวอักษรใด ๆ ระหว่างเครื่องหมายอัญประกาศเดี่ยวเป็นเชลล์เมตาอักขระดังนั้นการอ้างอิงพวกเขาจึงไม่มีผล)

นี่จะเทียบเท่ากับ:

grep -F -r -e f.alleles

โดยการแยกวิเคราะห์ปกติของ-ตัวเลือกนำหน้า -eตัวเลือกที่จะใช้เวลาโต้เถียง แต่-Fและ-rทำไม่ได้

เนื่องจากคุณไม่ได้ระบุไฟล์ใด ๆ ให้เป็น grep พฤติกรรมเริ่มต้นคือการดำเนินการกับ stdin ... ยกเว้นว่า-rตัวเลือกไม่สมเหตุสมผลดังนั้นจึงเป็นค่าเริ่มต้นในการค้นหา.(ไดเรกทอรีปัจจุบัน) ซ้ำ ๆ และไม่สนใจ stdin ในบางรุ่น

คุณต้องใช้--ตัวบ่งชี้ "ไม่มีตัวเลือกเพิ่มเติม" ก่อน regexp ที่ขึ้นต้นด้วย-เช่นเดียวกับใน

grep -F -- -ref.alleles

ฉันติดตามจุดที่พฤติกรรมของ-rโดยไม่มีการขัดแย้งไฟล์ที่เปลี่ยนแปลง มันอยู่ในรุ่น 2.11 เปิดตัว 2 มีนาคม 2012 ดูประกาศการเปิดตัว

กระทำคอมไพล์ซึ่งได้รับผลกระทบพฤติกรรมที่มีคนนี้และคนนี้

หากคุณทำงานgrep --versionกับสองเครื่องของฉันฉันแน่ใจว่าคุณจะพบว่าหนึ่งในนั้นอยู่ในด้านที่ผิดของ 2.11


คำตอบที่ยอดเยี่ยมขอบคุณสำหรับการวิจัยไปจนถึงเวอร์ชั่นที่พฤติกรรมเปลี่ยนไป
richardneish

2
ว้าวขอบคุณ. คุณพูดถูกฉันมี grep 2.6.3 กับ grep 2.14
Greg_the_Ant

6

ผู้นำ-คือปัญหา หากต้องการรับผลลัพธ์เดียวกันให้เพิ่ม--:

grep -F -- '-ref.alleles'

จากman bash:

A -- signals the end of options and disables further option
processing. Any arguments after the -- are treated as filenames
and arguments.

1
ทำไมมันแตกต่างกันใน Ubuntu และ Fedora มันไม่ควรให้ผลลัพธ์เชิงลบเหมือนกันกับทั้งคู่หรือ
Glueon

ขอบคุณ หากคำสั่งนี้ถูกส่งไปยังคำสั่งอื่นคำสั่ง - จะทำให้เกิดปัญหาที่นั่นหรือไม่? หรือไม่ - เพียงแค่ใช้กับคำสั่งที่มันปรากฏขึ้น?
Greg_the_Ant

4
หน้าคนทุบตีไม่เกี่ยวข้องจริงๆ มันอธิบายการรักษา--ในบรรทัดคำสั่งทุบตีของตัวเองซึ่งเป็นอิสระจากความเข้าใจ grep --ของ มันทำงานในลักษณะเดียวกันเพราะเป็นการประชุมทั่วไป แต่โดยทั่วไปแล้วหน้าคนของเชลล์ไม่ได้บอกอะไรคุณเกี่ยวกับความหมายของการขัดแย้งกับโปรแกรมอื่น

1

ตรวจสอบ. bashrc หากมีนามแฝงใด ๆ ในคำสั่ง grep ซึ่งจะแทนที่พฤติกรรมของมัน บางทีมันอาจเป็นปัญหา ลองใช้ grep โดยไม่มีพารามิเตอร์ "-F"

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