Grep inizio della riga


15

Ho un file con i seguenti contenuti:

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

Come posso estrarre ogni riga che inizia con una parentesi?


4
Per qualche motivo, ho letto "Grep inizio dei tempi" ...
Mateen Ulhaq,

Risposte:


32

Il simbolo per l'inizio di una linea è ^. Quindi, per stampare tutte le righe il cui primo carattere è a (, dovresti abbinare ^(:

  1. grep

    grep '^(' file
    
  2. sed

    sed -n '/^(/p' file
    

6

utilizzando perl

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

Produzione:

(((jfojfojeojfow 
(((jfojfojeojfow

Spiegazione (parte regex)

  • /^\(/

    • ^ asserire la posizione all'inizio della stringa
    • \(corrisponde (letteralmente al personaggio

4

Ecco bashuna fodera:

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

Qui stiamo leggendo ogni riga di input e se la riga inizia con (, la riga viene stampata. Il test principale viene eseguito da [[ $i =~ ^\( ]].

Utilizzando python:

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

Qui line.startswith('(')controlla se la linea inizia con (, in tal caso viene stampata la linea.


3

awk

awk '/^\(/' testfile.txt

Risultato

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

Pitone

Come 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

O in alternativa:

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

Aspetto BSD

lookè una delle utility Unix classiche ma poco conosciute, apparsa molto tempo fa in AT&T Unix versione 7. Da man look:

L'utilità look visualizza tutte le righe nel file che contengono stringa come prefisso

Il risultato:

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

2

Puoi fare l'inverso.

grep -v '^[^(]' file

o

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

Se il file di input contiene righe vuote, vengono visualizzate anche le righe vuote.
AB

1

Utilizzare il comando grep per questo. Supponendo che il file con il contenuto menzionato sia chiamato t.txt:

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

Con '--color' come ulteriore argomento puoi persino vedere a colori nel terminale ciò che corrisponde. Anche queste istruzioni non corrispondono a righe vuote.


4
Ciò stamperà tutte le righe che contengono a (, non solo quelle che iniziano con una.
terdon,

Come ha detto Terdon.
kos

1
Sì. Manca il carattere '^' per iniziare la partita all'inizio della riga. Scusa per quello.
thedler il

1
Ora è meglio =) +1
AB
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.