Grep başlangıcı


16

Aşağıdaki içeriğe sahip bir dosya var:

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

Parantez ile başlayan her satırı nasıl ayıklayabilirim?


4
Nedense, "Grep zamanın başlangıcını" okudum ...
Mateen Ulhaq

Yanıtlar:


33

Bir satırın başlangıcı sembolü ^. Yani, ilk karakteri bir olan tüm satırları yazdırmak (için eşleştirmek istersiniz ^(:

  1. grep

    grep '^(' file
    
  2. sed

    sed -n '/^(/p' file
    

6

kullanma perl

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

Çıktı:

(((jfojfojeojfow 
(((jfojfojeojfow

Açıklama (normal kısım)

  • /^\(/

    • ^ dizenin başındaki iddia konumu
    • \(karakteri (tam anlamıyla eşleştirir

4

İşte bashbir astar:

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

Burada her bir girdi satırını okuyoruz ve eğer çizgi ile başlıyorsa (, çizgi yazdırılır. Ana test tarafından yapılır [[ $i =~ ^\( ]].

Kullanma python:

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

Burada line.startswith('('), çizginin başlayıp başlamadığını kontrol eder (, eğer öyleyse çizgi yazdırılır.


3

awk

awk '/^\(/' testfile.txt

Sonuç

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

piton

Python tek astar olarak:

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

Veya alternatif olarak:

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

BSD görünümü

lookGönderen AT & T Unix 7. versiyonda yolu geri göründü klasik ama az bilinen Unix programları, biridir man look:

Look Utility, dosyada önek olarak dize içeren tüm satırları görüntüler

Sonuç:

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

2

Tersini yapabilirsiniz.

grep -v '^[^(]' file

veya

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

Giriş dosyasında boş satırlar varsa, boş satırlar da görüntülenir.
AB

1

Bunun için grep komutunu kullanın. Söz konusu içeriğe sahip dosyanın varsayımına t.txt adı verilir:

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

Daha fazla argüman olarak '--color' ile terminalde neyin eşleştiğini renkli olarak görebilirsiniz. Bu talimat boş satırlarla da eşleşmiyor.


4
Bu, (yalnızca bir ile başlayanları değil, a içeren tüm satırları yazdırır .
terdon

Terdon'un dediği gibi.
kos

1
Evet. Eşleşmeyi satırın başında başlatmak için '^' karakteri kaçırıldı. Bunun için özür dilerim.
thedler

1
Şimdi daha iyi =) +1
AB
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.