Grep awal baris

15

Saya punya file dengan konten berikut:

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

Bagaimana saya bisa mengekstrak setiap baris yang dimulai dengan tanda kurung?

pengguna3069326
sumber
4
Untuk beberapa alasan, saya membaca "Grep awal waktu" ...
Mateen Ulhaq

Jawaban:

32

Simbol untuk awal garis adalah ^. Jadi, untuk mencetak semua baris yang karakter pertamanya adalah (, Anda ingin mencocokkan ^(:

  1. grep

    grep '^(' file
    
  2. sed

    sed -n '/^(/p' file
    
terdon
sumber
6

Menggunakan perl

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

Keluaran:

(((jfojfojeojfow 
(((jfojfojeojfow

Penjelasan (bagian regex)

  • /^\(/

    • ^ menegaskan posisi pada awal string
    • \(cocok dengan karakter (secara harfiah
AB
sumber
4

Ini bashsatu liner:

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

Di sini kita membaca setiap baris input dan jika baris dimulai dengan (, garis dicetak. Tes utama dilakukan oleh [[ $i =~ ^\( ]].

Menggunakan python:

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

Di sini line.startswith('(')memeriksa apakah garis dimulai dengan (, jika demikian maka garis dicetak.

heemayl
sumber
3

awk

awk '/^\(/' testfile.txt

Hasil

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

Python

Sebagai python one-liner:

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

Atau sebagai alternatif:

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

Tampilan BSD

lookadalah salah satu utilitas Unix klasik tetapi sedikit diketahui, yang muncul jauh di AT&T Unix versi 7. Dari man look:

Utilitas tampilan menampilkan setiap baris dalam file yang berisi string sebagai awalan

Hasil:

$ look "(" input.txt
(((jfojfojeojfow 
(((jfojfojeojfow
Sergiy Kolodyazhnyy
sumber
2

Anda dapat melakukan kebalikannya.

grep -v '^[^(]' file

atau

sed '/^[^(]/d' file
Avinash Raj
sumber
Jika file input berisi baris kosong, baris kosong juga ditampilkan.
AB
1

Gunakan perintah grep untuk ini. Dengan asumsi file dengan konten yang disebutkan disebut t.txt:

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

Dengan '--color' sebagai argumen lebih lanjut Anda bahkan dapat melihat dalam warna di terminal apa yang cocok. Instruksi ini juga tidak cocok dengan baris kosong.

thedler
sumber
4
Itu akan mencetak semua baris yang mengandung (, tidak hanya yang dimulai dengan satu.
terdon
Seperti kata terdon.
kos
1
Iya. Ketinggalan karakter '^' untuk memulai pertandingan di awal baris. Maaf untuk itu.
thedler
1
Sekarang lebih baik =) +1
AB