grep man page ของคำสั่งสำหรับตัวเลือกที่ใส่ยัติภังค์


18

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


4
เรียนรู้การค้นหาใน Vim
arsaKasra

คำตอบ:


14

ลองใช้sedคำสั่งง่ายๆนี้

$ man grep | sed -n '/-i, --ignore-case/,+2p'
    -i, --ignore-case
              Ignore  case  distinctions  in  both  the  PATTERN and the input
              files.  (-i is specified by POSIX.)

คำอธิบาย:

sed -n '/-i, --ignore-case/,+2p'

        |<-Search pattern->|

มันจะพิมพ์บรรทัดที่มีรูปแบบการค้นหาพร้อมกับ 2 บรรทัดที่แสดงอยู่ด้านล่างไปยังบรรทัดรูปแบบการค้นหา

หรือ

คุณสามารถให้ค่าสถานะได้เฉพาะใน patten ด้านล่างเท่านั้น

avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *i, -/,+3p'
       -i, --ignore-case
              Ignore  case  distinctions  in  both  the  PATTERN and the input
              files.  (-i is specified by POSIX.)

avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *V, -/,+3p'
       -V, --version
              Print  the version number of grep to the standard output stream.
              This version number should be included in all bug  reports  (see
              below).
avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *F, -/,+3p'
       -F, --fixed-strings
              Interpret PATTERN as a  list  of  fixed  strings,  separated  by
              newlines,  any  of  which is to be matched.  (-F is specified by
              POSIX.)
avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *G, -/,+3p'
       -G, --basic-regexp
              Interpret PATTERN  as  a  basic  regular  expression  (BRE,  see
              below).  This is the default.

คุณสามารถเพิ่มสคริปต์นี้ใน.bashrc( $HOME/.bashrc) เพื่อการเข้าถึงที่รวดเร็ว:

mangrep(){
    USAGE="mangrep <application> <switch>"
    if [[ "$#" -ne "2" ]]
      then
          echo "Usage: $USAGE"
      else
          man "$1" | sed -n "/ *"$2", -/,+3p"
    fi
}

23

พิมพ์คำสั่งด้านล่างบนเทอร์มินัล:

man grep

จากนั้นพิมพ์ตัวอักษรเฉือน/และเขียนการค้นหาของคุณเช่นตามด้วย-i Enterสิ่งนี้จะวางตำแหน่งเคอร์เซอร์ในการค้นหาสตริงครั้งแรก การกดnเลื่อนเคอร์เซอร์ไปที่การเกิดขึ้นครั้งถัดไป การกดShift+ nย้ายเคอร์เซอร์ไปที่เหตุการณ์ก่อนหน้า


1
มันจะหาทั้งหมด-i's man greppage.But OP ต้องการเพียงคำอธิบายที่เกี่ยวข้องกับ-iธงในหน้าคน
Avinash Raj

3
@AvinashRaj -iไม่มีก็จะช่วยให้คุณวงจรผ่านการเกิดขึ้นของแต่ละคน นั่นคือสิ่งที่ OP ต้องการ
terdon

9

ในขณะที่วิธีการที่ง่ายที่สุดคือการค้นหาด้วย/คำแนะนำโดย @girardengo คุณสามารถใช้grepแทนวิธีsedที่ฉันค้นหาได้ง่ายขึ้น:

$ man grep | grep -A 1 '^ *-i'
   -i, --ignore-case
          Ignore  case  distinctions  in  both  the  PATTERN and the input
          files.  (-i is specified by POSIX.)

ความ-A Nหมาย "พิมพ์ N บรรทัดหลังจากการจับคู่หนึ่งเพียงเคล็ดลับที่จะได้รับไม่กี่บรรทัดถัดไปคล้ายกับแนวทางของ Avinash sed


3

คุณสามารถใช้ฟังก์ชั่นการค้นหาข้างในmanเพียง"s"กดปุ่มพิมพ์ที่คุณต้องการ (-i ในกรณีของคุณ) และกดปุ่มอินโทร


ฉันพิมพ์ man grep หลังจากนั้นฉันกด s หลังจากนั้นฉันเห็นล็อกไฟล์: หลังจากนั้นฉันพิมพ์ -i และ ENTER แต่ฉันไม่เห็นคำอธิบายหรือมีบางสิ่งที่ฉันไม่รู้
Mohammad Reza Rezwani


2

วิธีที่มีประสิทธิภาพที่สุดที่ฉันรู้คือการค้นหาหน้าคน-i(เว็บไซต์นี้ดูเหมือนจะล้มเหลวในการแสดงรหัสของฉันสิ่งที่ฉันหมายถึงคือ<space><space><space>-i) นั่นคือ 3 ช่องว่าง (คุณอาจต้องการช่องว่างมากขึ้น / น้อยลง) ตามด้วยธงที่คุณต้องการ มันใช้งานได้ในประสบการณ์ของฉันเกือบตลอดเวลาและคุณสามารถเปลี่ยนไปเป็นรุ่นที่แตกต่างกันในกรณีที่ใช้งานไม่ได้

มันทำงานได้เพราะเอกสารที่แท้จริงของธงมักจะเยื้อง มันหลีกเลี่ยงการค้นหาการกล่าวถึงธงอื่น ๆ ในส่วนอื่น ๆ เพราะโดยปกติจะมีช่องว่างหน้าเดียวเท่านั้น


1

ทุกคำตอบอาจใช้ได้ แต่ฉันคิดว่าคุณกำลังมุ่งเน้นไปที่เอกสารเพียงชิ้นเดียวไม่ใช่ทั้งหมด ตัวอย่างเช่นเพื่อค้นหา-iสวิตช์ของเอกสารประกอบ grep:

info grep Invoking Command-line\ Options Matching\ Control

ฉันจะค้นหาข้อมูลทั้งหมดเกี่ยวกับ "grep" วิธีการ "เรียกใช้" ตัวเลือกบรรทัดคำสั่งเฉพาะ "สำหรับ" การควบคุมการจับคู่ " น่าเศร้าที่มันไม่ได้ไปมากขึ้นลึกลงไปกว่านั้น แต่มันก็มี-i, -y, --ignore-caseในที่หนึ่ง 25 เส้นบางสิ่งบางอย่างที่เหมาะสมที่คุณไม่ต้องเลื่อนทั้งหมดลงในแบบของคุณ

โซลูชันนี้มีความยืดหยุ่นมากขึ้นและช่วยให้คุณสามารถค้นหาข้อมูลทั้งหมดได้:

info --apropos=--ignore-case
"(coreutils)join invocation" -- --ignore-case <1>
"(coreutils)uniq invocation" -- --ignore-case <2>
"(coreutils)sort invocation" -- --ignore-case
"(gettext)msggrep Invocation" -- --ignore-case, ‘msggrep’ option
"(grep)Matching Control" -- --ignore-case

(ต้องใช้--ignore-caseแทน-iเนื่องจากเป็นเรื่องธรรมดาเกินไป แต่คุณสามารถประมวลผลผลลัพธ์เป็นข้อมูลได้ในทุกกรณี)

ในกรณีนี้คุณมีทั้งชื่อของหน้าข้อมูลและส่วนที่แน่นอน อ่าเกือบลืมไปเลยว่าคุณสามารถtabผ่านหน้าข้อมูลส่วนใหญ่ได้


1

คุณสามารถใช้ Perl และ "โหมดย่อหน้า" เพื่อแยกเฉพาะย่อหน้าที่เกี่ยวข้อง:

man grep | perl -00 -ne 'print if / -i/'

1

วิธีการที่ฉันชอบที่จะหาตัวเลือกที่ได้รับในmanหน้าคือการใช้ regex \s{2,}-optionเช่น สำหรับคำถามที่มีอยู่ในมือคุณสามารถทำได้man grepแล้วพิมพ์ regex:

/\s{3,}-i

หรือ

/ {3,}-i
 ^------------- space here

สิ่งนี้จะจับคู่-iเมื่อตามด้วยช่องว่างสามช่องขึ้นไป


0

ในฐานะที่lessถูกใช้โดยเริ่มต้นเป็นเพจเจอร์สำหรับmanคุณสามารถใช้LESSตัวแปรสภาพแวดล้อมที่จะผ่านรูปแบบการค้นหาเมื่อlessเปิดหน้าเว็บ นี้เป็นเหมือนการทำเช่นman lsนั้นค้นหาตัวเลือก--allหรือ-aโดยการพิมพ์/แล้วป้อนเช่นรูปแบบหรือ--all-a

สิ่งเหล่านี้สามารถทำได้โดย:

LESS='+/--all' man ls

หรือ

LESS='+/-a' man ls

/ป้อนข้อมูลในสิ่งที่คุณต้องการค้นหาหลังจาก

สันนิษฐานว่าสิ่งนี้ทำงานได้ดีที่สุดสำหรับตัวเลือกแบบยาว (เช่น--all) เมื่อเปรียบเทียบกับตัวเลือกแบบสั้น (เช่น-a)


0

หากคุณต้องการผลการค้นหาสำหรับรูปแบบที่เริ่มต้นด้วยยัติภังค์ใช้ ก่อนที่รูปแบบที่คุณระบุ ตัวอย่างการใช้:grepman <program>--man find

man find | grep -- -type

หากคุณต้องการข้อมูลเพิ่มเติมเช่นส่วนทั้งหมดอธิบายตัวเลือกลองใช้sed:

$ man find | sed -n '/-mindepth/,/^$/p'
   -mindepth levels
          Do  not apply any tests or actions at levels less than levels (a
          non-negative integer).  -mindepth  1  means  process  all  files
          except the command line arguments.

แหล่ง

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