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?


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
    

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

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.


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

2

Puedes hacer lo contrario.

grep -v '^[^(]' file

o

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

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.