Grep début de ligne

15

J'ai un fichier avec le contenu suivant:

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

Comment extraire chaque ligne commençant par une parenthèse?

user3069326
la source
4
Pour une raison quelconque, j'ai lu "Grep début des temps" ...
Mateen Ulhaq

Réponses:

32

Le symbole du début d'une ligne est ^. Donc, pour imprimer toutes les lignes dont le premier caractère est un (, vous voudriez faire correspondre ^(:

  1. grep

    grep '^(' file
    
  2. sed

    sed -n '/^(/p' file
    
terdon
la source
6

En utilisant perl

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

Production:

(((jfojfojeojfow 
(((jfojfojeojfow

Explication (partie regex)

  • /^\(/

    • ^ affirmer la position au début de la chaîne
    • \(correspond (littéralement au personnage
UN B
la source
4

Voici bashune doublure:

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

Ici, nous lisons chaque ligne d'entrée et si la ligne commence par (, la ligne est imprimée. Le test principal est effectué par [[ $i =~ ^\( ]].

En utilisant python:

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

Ici line.startswith('(')vérifie si la ligne commence par (, si oui, alors la ligne est imprimée.

heemayl
la source
3

awk

awk '/^\(/' testfile.txt

Résultat

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

Python

En 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

Ou bien:

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

Look BSD

lookest l'un des utilitaires Unix classiques mais peu connus, qui est apparu très loin dans AT&T Unix version 7. De man look:

L'utilitaire look affiche toutes les lignes du fichier qui contiennent une chaîne comme préfixe

Le résultat:

$ look "(" input.txt
(((jfojfojeojfow 
(((jfojfojeojfow
Sergiy Kolodyazhnyy
la source
2

Vous pouvez faire l'inverse.

grep -v '^[^(]' file

ou

sed '/^[^(]/d' file
Avinash Raj
la source
Si le fichier d'entrée contient des lignes vides, les lignes vides sont également affichées.
AB
1

Utilisez la commande grep pour cela. En supposant que le fichier avec le contenu mentionné s'appelle t.txt:

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

Avec '--color' comme argument supplémentaire, vous pouvez même voir en couleur dans le terminal ce qui correspond. Cette instruction ne correspond pas non plus aux lignes vides.

thedler
la source
4
Cela imprimera toutes les lignes contenant un (, pas seulement celles qui commencent par un.
terdon
Comme l'a dit Terdon.
kos
1
Oui. Vous avez manqué le caractère '^' pour commencer la correspondance au début de la ligne. Désolé.
thedler
1
Maintenant c'est mieux =) +1
AB