grep จุดเริ่มต้นของบรรทัด


15

ฉันมีไฟล์ที่มีเนื้อหาดังต่อไปนี้:

(((jfojfojeojfow 
//
hellow_rld
(((jfojfojeojfow
//
hellow_rld

ฉันจะแยกทุกบรรทัดที่ขึ้นต้นด้วยวงเล็บได้อย่างไร


4
ด้วยเหตุผลบางอย่างฉันอ่าน "เวลาเริ่มต้น Grep" ...
Mateen Ulhaq

คำตอบ:


32

^สัญลักษณ์สำหรับจุดเริ่มต้นของบรรทัดคือ ดังนั้นในการพิมพ์ทุกสายที่มีตัวอักษรตัวแรกเป็น(ที่คุณต้องการเพื่อให้ตรงกับ^(:

  1. grep

    grep '^(' file
    
  2. sed

    sed -n '/^(/p' file
    

6

การใช้ perl

perl -ne '/^\(/ && print' foo

เอาท์พุท:

(((jfojfojeojfow 
(((jfojfojeojfow

คำอธิบาย (ส่วน regex)

  • /^\(/

    • ^ ยืนยันตำแหน่งที่จุดเริ่มต้นของสตริง
    • \(ตรงกับตัว(อักษรอย่างแท้จริง

4

นี่คือbashหนึ่งซับ:

while IFS= read -r line; do [[ $line =~ ^\( ]] && echo "$line"; done <file.txt

ที่นี่เรากำลังอ่านอินพุตแต่ละบรรทัดและหากบรรทัดขึ้นต้นด้วย(บรรทัดนั้นจะถูกพิมพ์ [[ $i =~ ^\( ]]การทดสอบหลักจะกระทำโดย

การใช้python:

#!/usr/bin/env python2
with open('file.txt') as f:
    for line in f:
        if line.startswith('('):
            print line.rstrip()

ที่นี่line.startswith('(')ตรวจสอบว่าบรรทัดเริ่มต้นด้วย(ถ้าเป็นเช่นนั้นจะมีการพิมพ์บรรทัด


3

awk

awk '/^\(/' testfile.txt

ผลลัพธ์

$ awk '/^\(/' testfile.txt                   
(((jfojfojeojfow 
(((jfojfojeojfow

หลาม

ในฐานะที่เป็นงูหลามหนึ่งซับ:

$ python -c 'import sys;print "\n".join([x.strip() for x in sys.stdin.readlines() if x.startswith("(")])' < input.txt    
(((jfojfojeojfow
(((jfojfojeojfow

หรืออีกทางหนึ่ง:

$ python -c 'import sys,re;[sys.stdout.write(x) for x in open(sys.argv[1]) if re.search("^\(",x)]' input.txt

ดู BSD

lookเป็นหนึ่งในยูทิลิตี้ Unix ที่คลาสสิค แต่ไม่ค่อยมีคนรู้จักซึ่งปรากฏย้อนกลับไปใน AT&T Unix เวอร์ชั่น 7 จากman look:

ยูทิลิตี้ค้นหาแสดงบรรทัดใด ๆ ในไฟล์ที่มีสตริงเป็นส่วนนำหน้า

ผลลัพธ์:

$ look "(" input.txt
(((jfojfojeojfow 
(((jfojfojeojfow

2

คุณสามารถทำสิ่งที่ตรงกันข้าม

grep -v '^[^(]' file

หรือ

sed '/^[^(]/d' file

หากไฟล์อินพุตมีบรรทัดว่างบรรทัดว่างจะแสดงขึ้น
AB

1

ใช้คำสั่ง grep สำหรับสิ่งนี้ สมมติว่าไฟล์ที่มีเนื้อหาดังกล่าวเรียกว่า t.txt:

user:~$ grep '^(' t.txt
(((jfojfojeojfow
(((jfojfojeojfow

ด้วย '--color' เป็นอาร์กิวเมนต์เพิ่มเติมคุณสามารถเห็นสีในเทอร์มินัลสิ่งที่ตรงกัน คำสั่งนี้ยังไม่ตรงกับบรรทัดว่าง


4
ที่จะพิมพ์ทุกบรรทัดที่มี a (ไม่ใช่เฉพาะบรรทัดที่ขึ้นต้นด้วยหนึ่งบรรทัด
terdon

อย่างที่ terdon พูด
kos

1
ใช่. พลาดอักขระ '^' เพื่อเริ่มการแข่งขันที่จุดเริ่มต้นของบรรทัด ขอโทษสำหรับสิ่งนั้น.
thedler

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