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?


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
    

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

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.


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

2

Vous pouvez faire l'inverse.

grep -v '^[^(]' file

ou

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

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.