Grep principio de línea

15

Tengo un archivo con los siguientes contenidos:

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

¿Cómo puedo extraer cada línea que comienza con un paréntesis?

usuario3069326
fuente
44
Por alguna razón, leí "Grep principio del tiempo" ...
Mateen Ulhaq

Respuestas:

32

El símbolo para el comienzo de una línea es ^. Por lo tanto, para imprimir todas las líneas cuyo primer carácter es un (, querrá hacer coincidir ^(:

  1. grep

    grep '^(' file
    
  2. sed

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

Utilizando perl

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

Salida:

(((jfojfojeojfow 
(((jfojfojeojfow

Explicación (parte de la expresión regular)

  • /^\(/

    • ^ afirmar posición al inicio de la cadena
    • \(coincide con el personaje (literalmente
AB
fuente
4

Aquí hay un bashtrazador de líneas:

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

Aquí estamos leyendo cada línea de entrada y si la línea comienza con (, la línea se imprime. La prueba principal se realiza por [[ $i =~ ^\( ]].

Utilizando python:

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

Aquí line.startswith('(')verifica si la línea comienza con (, si es así, la línea se imprime.

heemayl
fuente
3

awk

awk '/^\(/' testfile.txt

Resultado

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

Pitón

Como 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 alternativamente:

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

Aspecto BSD

lookes una de las utilidades clásicas pero poco conocidos Unix, que aparecieron hacia atrás en forma de AT & T UNIX versión 7. A partir de man look:

La utilidad de búsqueda muestra las líneas del archivo que contienen cadenas como prefijo

El resultado:

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

Puedes hacer lo contrario.

grep -v '^[^(]' file

o

sed '/^[^(]/d' file
Avinash Raj
fuente
Si el archivo de entrada contiene líneas vacías, también se muestran las líneas en blanco.
AB
1

Use el comando grep para esto. Suponiendo que el archivo con el contenido mencionado se llama t.txt:

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

Con '--color' como argumento adicional, incluso puede ver en color en el terminal lo que coincide. Esta instrucción tampoco coincide con líneas vacías.

thedler
fuente
44
Eso imprimirá todas las líneas que contienen un (, no solo las que comienzan con una.
terdon
Como dijo terdon.
kos
1
Si. Se perdió el carácter '^' para comenzar el partido al comienzo de la línea. Lo siento por eso.
thedler
1
Ahora es mejor =) +1
AB