grep
เป็นเครื่องมือประมวลผลข้อความ คาดว่าใส่ของพวกเขาจะเป็นไฟล์ข้อความ ดูเหมือนว่าสิ่งเดียวกันจะเกิดขึ้นtr
บน macOS (แม้ว่าtr
ควรสนับสนุนไฟล์ไบนารี)
คอมพิวเตอร์เก็บข้อมูลเป็นลำดับของไบต์ ข้อความคือลำดับของอักขระ มีหลายวิธีที่ตัวละครเข้ารหัสเป็นไบต์เรียกว่าเข้ารหัสตัวอักษร พฤตินัยอักขระที่เป็นมาตรฐานการเข้ารหัสในส่วนของโลกโดยเฉพาะอย่างยิ่งใน OSX เป็นUTF-8ซึ่งเป็นเข้ารหัสสำหรับUnicodeชุดตัวอักษร มีเพียง 256 ไบต์ที่เป็นไปได้ แต่มีอักขระ Unicode มากกว่าล้านตัวดังนั้นอักขระส่วนใหญ่จึงเข้ารหัสเป็นหลายไบต์ UTF-8 เป็นการเข้ารหัสที่มีความยาวผันแปร: ขึ้นอยู่กับตัวอักษรซึ่งอาจใช้เวลาตั้งแต่หนึ่งถึงสี่ไบต์ในการเข้ารหัสอักขระ บางส่วนของไบต์ไม่ได้เป็นตัวแทนของตัวละครใน UTF-8 ดังนั้นจึงมีลำดับของไบต์ซึ่งไม่ใช่ไฟล์ข้อความ UTF-8 ที่ถูกต้อง
tr
กำลังบ่นเพราะมันพบกับลำดับไบต์ คาดว่าจะเห็นไฟล์ข้อความที่เข้ารหัสใน UTF-8 แต่จะเห็นข้อมูลไบนารีซึ่งไม่ถูกต้อง UTF-8
เอกสาร Microsoft Word ไม่ใช่ไฟล์ข้อความ: เป็นเอกสารประมวลผลคำ รูปแบบเอกสารการประมวลผลคำไม่เพียง แต่เข้ารหัสข้อความเท่านั้น แต่ยังจัดรูปแบบภาพที่ฝัง ฯลฯ รูปแบบ Word เช่นเดียวกับรูปแบบการประมวลผลคำส่วนใหญ่ไม่ใช่ไฟล์ข้อความ
คุณสามารถสั่งการประมวลผลข้อความเครื่องมือในการดำเนินการเกี่ยวกับไบต์โดยการเปลี่ยนสถานที่เกิดเหตุ เลือกโลแคล“ C” ซึ่งโดยทั่วไปหมายถึง“ ไม่มีอะไรแฟนซี” ในบรรทัดคำสั่งที่คุณสามารถเลือกการตั้งค่าสถานที่มีตัวแปรสภาพแวดล้อม
export LC_CTYPE=C
tr '\r' '\n' < target-file | grep search-string
สิ่งนี้จะไม่ส่งข้อผิดพลาดใด ๆ แต่จะไม่ทำสิ่งใดที่มีประโยชน์เนื่องจากtarget-file
ยังคงเป็นไฟล์ไบนารีซึ่งไม่น่าจะมีสตริงการค้นหาส่วนใหญ่ที่คุณจะระบุ
อนึ่งtr '\r' '\n'
ไม่ใช่คำสั่งที่มีประโยชน์มากเว้นแต่คุณจะมีไฟล์ข้อความเหลืออยู่จาก Mac OS 9 หรือเก่ากว่า \r
(carriage return) เป็นตัวแบ่งบรรทัดใหม่ใน Mac OS ก่อน Mac OS X เนื่องจาก OSX ตัวคั่นบรรทัดใหม่คือ\n
(ตัวป้อนบรรทัดมาตรฐาน unix) และไฟล์ข้อความไม่มีการขึ้นบรรทัดใหม่ Windows ใช้ลำดับสองอักขระ CR-LF เพื่อแสดงการขึ้นบรรทัดใหม่ tr -d '\r'
จะแปลงไฟล์ข้อความ Windows เป็นไฟล์ข้อความ Unix / Linux / OSX
ดังนั้นคุณจะค้นหาเอกสาร Word จากบรรทัดคำสั่งได้อย่างไร .docx
เอกสาร Word เป็นจริงไฟล์ zipที่มีไฟล์หลายคนหลักอยู่ในXML
unzip -l Position-Paper-Final-Version.docx
Mac OS X มีโปรแกรมอรรถประโยชน์zipgrepเพื่อค้นหาไฟล์ zip ภายใน
zipgrep DeCSS Position-Paper-Final-Version.docx
ผลลัพธ์จะไม่สามารถอ่านได้มากเนื่องจากไฟล์ XML ในรูปแบบ docx ส่วนใหญ่ประกอบด้วยบรรทัดขนาดใหญ่หนึ่งบรรทัด หากคุณต้องการค้นหาภายในเนื้อความหลักของเอกสารให้แตกไฟล์word/document.xml
จากไฟล์เก็บถาวร โปรดทราบว่านอกเหนือไปจากข้อความเอกสารไฟล์นี้มีมาร์กอัป XML ซึ่งแสดงถึงโครงสร้างของเอกสาร คุณสามารถนวดมาร์กอัป XML ได้ด้วยsed
การแบ่งเป็นบรรทัดที่จัดการได้
unzip -p Position-Paper-Final-Version.docx word/document.xml |
sed -e 's/></>\n</g' |
grep DeCSS