`ack` จะไม่แสดงหมายเลขบรรทัดในไฟล์เดียว


17

ฉันใช้ ack เพื่อค้นหาสตริง เมื่อฉันรันโดยไม่มีอาร์กิวเมนต์ไฟล์ฉันจะได้รับหมายเลขบรรทัด:

$> ack function
themes/README.txt
7:Drupal's sub-theme functionality to ensure easy maintenance and upgrades.

sites/default/default.services.yml
48:    # - The dump() function can be used in Twig templates to output information

...

แต่เมื่อฉันพยายามระบุไฟล์ฉันไม่ได้รับหมายเลขบรรทัด

$> ack function themes/README.txt
Drupal's sub-theme functionality to ensure easy maintenance and upgrades.

ฉันทำ Google Googling เพื่อสวิตช์แล้ว แต่ไม่พบผลลัพธ์ ฉันจะได้รับ ack เพื่อแสดงหมายเลขบรรทัดของผลลัพธ์จากไฟล์เดียวได้อย่างไร

คำตอบ:


21

เมื่อคุณไม่ระบุไฟล์ใด ๆackจะค้นหาไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อย หากไฟล์มีรูปแบบการจับคู่ให้ackพิมพ์ชื่อไฟล์นั้นหมายเลขบรรทัดและบรรทัดที่ตรงกับรูปแบบ

พฤติกรรมนี้ใช้ไม่ได้กับหนึ่งไฟล์ (ดูเอกสาร ack , ค้นหา-Hตัวเลือก)

เนื่องจากเมื่อackไม่มี-nบรรทัดตัวเลือกgrepซึ่งจะพิมพ์บรรทัดที่จับคู่กับหมายเลขบรรทัดสัมพัทธ์คุณมีสองตัวเลือกในการแก้ไขปัญหานี้

บังคับให้ใช้ackชื่อไฟล์การพิมพ์ด้วย-H:

ack -H pattern file

หรือผ่าน/dev/nullเป็นไฟล์ที่สอง:

ack pattern file /dev/null

7

คุณสามารถลองด้วยตัวเลือก--with-filename:

ack --with-filename 'function' themes/README.txt

ปัญหานี้จะยกขึ้นเป็นข้อผิดพลาดและปัญหาได้ถูกย้ายไปที่นี่


5

ควรมีตัวเลือกสำหรับสิ่งนี้ แต่ถ้าไม่มีคุณสามารถหลอกackให้คิดว่ามีไฟล์สองไฟล์ที่จะค้นหาผ่านโดยการเพิ่ม/dev/nullบรรทัดคำสั่งพิเศษ:

ack function themes/README.txt /dev/null

ในหมายเหตุด้านข้างคุณสามารถใช้เคล็ดลับเดียวกันนี้เพื่อgrep(1)แสดงชื่อไฟล์แม้ว่าคุณกำลังค้นหาไฟล์เดียว:

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