วิธีค้นหารูปแบบที่มีเครื่องหมายขีดคั่นอยู่ภายในหน้าคนได้อย่างไร


11

ฉันพยายามค้นหาคำสั่งเพื่อค้นหารูปแบบที่มีเครื่องหมายขีดคั่นอยู่ใน man page ทั้งหมด

ฉันดูman manแล้วพบตัวเลือกเหล่านี้ 3:

-K, --global-apropos

ค้นหาข้อความในหน้าคู่มือทั้งหมด นี่เป็นการค้นหาที่ดุร้ายและอาจใช้เวลาพอสมควร หากทำได้คุณควรระบุส่วนเพื่อลดจำนวนหน้าที่ต้องการค้นหา คำค้นหาอาจเป็นสตริงธรรมดา (ค่าเริ่มต้น) หรือนิพจน์ทั่วไปหากใช้--regexตัวเลือก

-w, --where, --path,--location

ไม่แสดงหน้าคู่มือจริง แต่พิมพ์ตำแหน่งของไฟล์ nroff ต้นทางที่จะฟอร์แมต

-S list, -s list,t--sections=list

รายการเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคหรือคั่นด้วยเครื่องหมายจุลภาคของคำสั่งเฉพาะส่วนที่ต้องการค้นหา ตัวเลือกนี้จะแทนที่$MANSECTตัวแปรสภาพแวดล้อม ( -sตัวสะกดใช้เพื่อความเข้ากันได้กับ System V)

ฉันพยายามรวมพวกเขาเพื่อค้นหารูปแบบmark-modified-linesซึ่งเป็นตัวเลือก readline ที่อธิบายในman bash:

$ man -s1 -Kw mark-modified-lines

แต่ไม่พบหน้าใด ๆ :

No manual entry for mark-modified-lines

16และออกคำสั่งกับรหัส
ฉันคิดว่าอาจจะเป็นไวยากรณ์ของคำสั่งผิด แต่ดูเหมือนจะไม่เป็นเช่นนั้นเนื่องจากคำสั่งนี้จะค้นหา 5 man pages บนระบบของฉันซึ่งมีคำว่าguitar:

$ man -s1 -Kw guitar

  /usr/share/man/man1/ffmpeg-all.1.gz
  /usr/share/man/man1/ffserver-all.1.gz
  /usr/share/man/man1/ffplay-all.1.gz
  /usr/share/man/man1/ffmpeg-filters.1.gz
  /usr/share/man/man1/ffprobe-all.1.gz

ฉันคิดว่าบางทีเครื่องหมายยัติภังค์อาจทำให้เกิดปัญหา ในman bashฉันพบ--regexตัวเลือกที่อธิบายดังนี้

--regex

แสดงหน้าเว็บทั้งหมดที่มีส่วนหนึ่งของทั้งชื่อหรือคำอธิบายของพวกเขาที่ตรงกับอาร์กิวเมนต์แต่ละหน้าเป็นนิพจน์ปกติของพวกเขาใด ๆ apropos(1)เช่นเดียวกับ เนื่องจากมีมักจะไม่มีทางที่เหมาะสมที่จะรับหน้า "ดีที่สุด" -aเมื่อค้นหานิพจน์ปกติตัวเลือกนี้หมายถึง

ฉันพยายามที่จะใช้ตัวเลือกนี้และแทนที่คำmark-modified-linesด้วย regex mark.modified.linesที่ตัวยัติภังค์ถูกแทนที่ด้วย metacharacter .ซึ่งควรตรงกับตัวละครใด ๆ :

$ man -s1 -Kw --regex 'mark.modified.lines'

มันยังไม่พิมพ์หน้าใด ๆ ในขณะที่ฉันรู้ว่าข้อความนั้นเขียนไว้ในbashหน้าคน

metacharacter .ใน regex ดูเหมือนจะถูกแยกวิเคราะห์ตามที่คาดไว้เนื่องจากคำสั่งนี้:

$ man -s1 -Kw --regex 'mark.mo'

พิมพ์:

  /usr/share/man/man1/x11perfcomp.1.gz
  /usr/share/man/man1/xditview.1.gz

และสิ่งเหล่านี้ 2 manpages ( x11perfcomp, xditview) มีทั้งการจับคู่โดย mark.moregex โดยเฉพาะอย่างยิ่งman x11perfcompมีบรรทัดนี้:

Mark Moraes wrote the original scripts to compare servers.
^^^^^^^

และman xditviewมีบรรทัดนี้:

    Mark Moraes (University of Toronto)
    ^^^^^^^

อย่างไรก็ตามman -s1 -Kw --regex 'mark.mo'ไม่พิมพ์หน้า bash man:

/usr/share/man/man1/bash.1.gz

ในขณะที่ฉันคาดว่ามันจะเนื่องจากมีบรรทัดนี้:

mark-modified-lines (Off)
^^^^^^^

เป็นไปได้หรือไม่ที่จะค้นหารูปแบบที่ประกอบด้วยเครื่องหมายขีดคั่นภายในหน้าคู่มือ?

คำตอบ:


15

man -Kค้นหาซอร์สโค้ดของหน้าคู่มือไม่ใช่แบบฟอร์มเรนเดอร์ (ดังที่แสดงโดยman) ยัติภังค์ถูกเข้ารหัส\-ดังนั้นคุณต้องค้นหาสิ่งต่อไปนี้:

man -s1 -Kw 'mark\-mo'

ใช่มันค่อนข้างคลุมเครือ หน้าคนกล่าวถึงในรายละเอียดของตัวเลือกที่man-K

โปรดทราบว่าสิ่งนี้จะค้นหาแหล่งที่มาของหน้าคู่มือไม่ใช่ข้อความที่แสดงผลและอาจรวมถึงผลบวกปลอมเนื่องจากสิ่งต่าง ๆ เช่นความคิดเห็นในไฟล์ต้นฉบับ การค้นหาข้อความที่แสดงผลจะช้ากว่ามาก

แต่การใช้สิ่งนี้อย่างถูกต้องเกี่ยวข้องกับการรู้แหล่งที่มาของข้อความที่คุณกำลังค้นหา


1
ปิดบัง? ใช่. นอกจากนี้ยังเป็นข้อผิดพลาด
kubanczyk

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