ฉันอยู่บน Ubuntu และฉันพิมพ์cat .bash_history | grep git
และมันกลับมา
ไฟล์ไบนารี (อินพุตมาตรฐาน) ตรงกัน
ฉันไม่อยู่และมีหลายสายในนั้นที่เริ่มต้นด้วยbash_history
git
เกิดอะไรขึ้นกับแสดงข้อผิดพลาดนี้และฉันจะแก้ไขได้อย่างไร
.bash_history: data
ฉันอยู่บน Ubuntu และฉันพิมพ์cat .bash_history | grep git
และมันกลับมา
ไฟล์ไบนารี (อินพุตมาตรฐาน) ตรงกัน
ฉันไม่อยู่และมีหลายสายในนั้นที่เริ่มต้นด้วยbash_history
git
เกิดอะไรขึ้นกับแสดงข้อผิดพลาดนี้และฉันจะแก้ไขได้อย่างไร
.bash_history: data
คำตอบ:
สันนิษฐานว่าไฟล์.bash_history
เริ่มต้นด้วยข้อมูลที่ไม่ใช่ข้อความดังนั้นจึงgrep
ถือว่าไฟล์เป็นไบนารี นี่คือการยืนยันโดยการfile .bash_history
ส่งออก:
.bash_history: data
คุณสามารถอ่านไม่กี่ไบต์ตั้งแต่เริ่มต้นเพื่อให้มีมุมมองที่สอดคล้องกัน:
head -c1K .bash_history
ที่นี่ฉันกำลังอ่าน 1 KiB แรก
คุณสามารถไปป์ STDOUT ไปยังhexdump
/ od
หรือที่คล้ายกัน
ในฐานะที่เป็นบันทึกด้านgrep
ใช้ชื่อไฟล์ (s) เป็นอาร์กิวเมนต์จึงcat
ไม่มีประโยชน์ที่นี่; แค่ทำ:
grep git .bash_history
head -c1k .bash_history
อ่าน 38 บรรทัดแรกของไฟล์. bash_history ของฉัน ทุกอย่างสามารถอ่านได้
grep -a git .bash_history
อะไร?
-a
ทำอย่างไร
-a
ทำให้grep
ไฟล์นั้นเป็นแบบไบนารี
-a
ทำให้grep
กระบวนการไบนารีไฟล์ราวกับว่ามันเป็นข้อความ
grep -a 'pattern'
คุณสามารถใช้
จากหน้าgrep ของมนุษย์ :
-a, --text
Process a binary file as if it were text; this is equivalent to the ‘--binary-files=text’ option.
-z
แฟล็กเพื่อจับคู่ข้ามหลายบรรทัด
ฉันได้เห็นคำถามนี้ในวันนี้เพราะผมมีปัญหาเดียวกันเมื่อฉันต้องการ grep .bash_history
ของฉัน (หมายเหตุเล็กน้อย: ฉันเปลี่ยนชื่อประวัติของฉันเพื่อให้สร้างใหม่ประวัติใหม่นี้ไม่ได้รับการปฏิบัติเป็นไบนารี)
ใน @heemayls คำตอบมีการระบุไว้ว่าgrep
ใช้ชื่อไฟล์และcat
จะไร้ประโยชน์ สิ่งนี้ไม่เป็นความจริงทั้งหมด จากgrep
หน้าคน:
หากไม่ได้ระบุไฟล์หรือระบุไฟล์“ -” grep จะค้นหาอินพุตมาตรฐาน
เพื่อให้คุณสามารถใช้และท่อมันcat
grep
อย่างไรก็ตามวิธีนี้ไม่ได้แก้ปัญหาที่.bash_history
จะถือว่าเป็นไบนารี สิ่งที่ถูกต้องคือใช้grep -a
(เช่นเดียวกับคำตอบจาก @AK_) ไม่ว่าคุณจะgrep
ประวัติโดยตรงหรือด้วยcat
และไปป์
cat .bash_history | grep -a git
หรือ
grep -a git .bash_history
file .bash_history
(file ~/.bash_history
) คืออะไร