วิธีการถ่ายโอนข้อมูลหน้าคน?


45

ฉันจะ 'สร้าง' หน้าคนอย่างฉันจะ 'จัดเก็บ' ไฟล์เพื่อให้ได้เพียงแค่การดัมพ์ของเนื้อหาได้อย่างไร

คำตอบ:


40

ก่อนอื่นไฟล์ man มักจะเป็นไฟล์ข้อความ gziped ที่ไหนสักแห่งในระบบไฟล์ของคุณ เนื่องจากระยะเวลาของคุณจะแตกต่างกันไปตามการค้นหาและคุณอาจต้องการรุ่นที่ประมวลผลและจัดรูปแบบที่มนุษย์ให้คุณแทนที่จะเป็นแหล่งที่มาคุณสามารถทิ้งมันด้วยmanเครื่องมือ เมื่อดูที่man manฉันเห็นว่าคุณสามารถเปลี่ยนโปรแกรมที่ใช้ดูหน้าคนที่มี-Pค่าสถานะดังนี้

man -P cat command_name

นอกจากนี้ยังไม่มีอะไรที่คุ้มค่าที่manตรวจพบโดยอัตโนมัติเมื่อคุณส่งเอาต์พุตแทนที่จะดูบนหน้าจอดังนั้นหากคุณกำลังประมวลผลด้วยอย่างอื่นคุณสามารถข้ามไปยังขั้นตอนนั้นได้เช่น:

man command_name | grep search_string

หรือถ่ายโอนไปยังไฟล์:

man command_name > formatted_man_page.txt

1
การใช้ -P ไม่ทำให้ไฟล์เอาต์พุตอ่านได้อย่างเรียบร้อย มันเขียนด้วยอักขระ ctrl-H ทั้งหมด ฉันเคยทำคน cmd>! man.cmd และเปิด man.cmd และทำ '% s / ^ H .// g' เพื่อลบอักขระควบคุมที่น่ารำคาญสำหรับการแสดงตัวหนาและตัวเอียง แต่นี่ก็ยังมีปัญหาบางอย่างเมื่อมีตัวละครพิเศษอื่น ๆ ฉันยังคงมองหาวิธีที่ดีในการหลีกเลี่ยงการแก้ไขด้วยตนเองไปยังเอาต์พุต
Chan Kim

@ChanKim คุณกำลังทำอะไรผิดพลาดหรือมีการกำหนดค่าบางอย่างที่ไม่ได้มาตรฐานในแบบของคุณเพราะทั้งสองวิธีในการผลิตผลลัพธ์ที่สะอาดในรูปแบบข้อความธรรมดาที่ไม่มีตัวควบคุมพิเศษ คุณแน่ใจว่าคุณไม่ได้manใช้นามแฝงเป็นอะไรบางอย่างหรือธงบังคับในเปลือกของคุณที่มีการแยกของคุณจากการทำงานตามปกติของman?
แม็กเคเล็บ

1
@Caleb ฉันยืนยันปัญหาของ OP CentOS รีลีส 6.7 (สุดท้าย), / usr / bin / man gcc> j, แก้ไข 'j', ทั้งหมดของ ctrl-H อยู่ในนั้น คำตอบที่ดีที่สุดที่ฉันพบคือที่commandlinefu.com/commands/view/2417/…
Charles Roth

1
man command_name > formatted_man_page.txtจะทำให้คำบางคำซ้ำกัน
Zigii Wong

52

ในการรับไฟล์ man page ของ ASCII โดยปราศจากความพยายาม backspace / ขีดล่างที่น่ารำคาญในการขีดเส้นใต้

man ksh | col -b > ksh.txt

6
คุณสมควรได้รับการโหวตเพิ่มเติม
Labo

2
สวัสดีทำไมการส่งออก piped Man จึงมีอักขระซ้ำซ้อน และ col-b ทำการลบออกอย่างไร ขอบคุณล่วงหน้า.
saurabheights

2
@saurabheights - ผู้ชายพยายามที่จะขีดเส้นใต้และข้อความที่เป็นตัวหนาและอาจจะมีบางอย่างที่มี backspaces, อักขระซ้ำ, escape sequenc es, ฯลฯ เป็นต้นเทคนิคที่อาจใช้ได้ถ้าคุณพิมพ์เอาต์พุต man บน dot matrix หรือเครื่องพิมพ์อื่น ๆ หรือแสดงมัน เป็นข้อความบนเทอร์มินัล ฉันไม่ได้อ่านแหล่งที่มาของคอลัมน์ แต่อาจเป็นเพียงการตรวจสอบ stdin byte byte และไม่ผ่าน backspaces ฯลฯ ไปยัง stdout หน้าคนของ col อ่านเหมือนใครบางคนเขียนโดยเฉพาะเพื่อกรองเอาท์พุทคน
Bruce Ediger

1
ตกลงที่เหมาะสม อักขระดังกล่าว (ซ่อนอยู่) อาจทำให้อักขระซ้ำกัน ขอบคุณบรูซ
saurabheights

คุณสมควรได้รับโหมด upvotes จริงๆ "col" สำหรับคอลัมน์ใช่ไหม
พีชคณิต

24

หน้าคนมักจะtroffเป็นไฟล์ที่ประมวลผลล่วงหน้าและคุณสามารถไปที่ข้อความธรรมดาด้วย

groff -t -e -mandoc -Tascii manpage.1 | col -bx > manpage.txt

grofftroffเป็นเสื้อคลุมสำหรับ

ข้อมูลเพิ่มเติมที่นี่

คุณอาจต้องใช้ gzip เพื่อคลายการบีบอัดไฟล์ man page ก่อนและคุณยังคงมีข้อมูลการจัดรูปแบบมากมายในผลลัพธ์


4
+1 สำหรับพูดคุยเกี่ยวกับ Groff / troff และการจัดรูปแบบของหน้าคน
lgeorget

11

ฉันทำสิ่งนี้ตลอดเวลา บรรทัดคำสั่งนี้ทำให้ฉันมีความสุข:

man man | col -bx > man.txt

col -b ลบแบ็คสเปซออก

col-bx ยังแทนที่แท็บด้วยช่องว่างซึ่งเป็นความต้องการที่แข็งแกร่งของฉัน

หากฉันต้องการให้ข้อความถูกจัดรูปแบบตามความกว้างของการกำหนดค่าตามความชอบของฉันในขณะที่อ่านฉันก็เปลี่ยนคำสั่งเป็น:

MANWIDTH=10000 man man | col -bx > man.txt

man man | col -bx > man.txtทำงานให้ฉัน ขอขอบคุณ.
JaredH

6

เพียงแค่ใช้manคำสั่ง - คุณสามารถไพพ์เอาท์พุทเป็นสิ่งอื่น ๆ เช่นเดียวกับที่คุณใช้กับcatไฟล์


1
ฉันชอบความเรียบง่าย
Joel Sjögren

3

หากคุณต้องการcatmanpage คุณสามารถไปที่cat:

man ls | cat

หากคุณต้องการถ่ายโอนเนื้อหาไปยังไฟล์:

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