web-dev-qa-db-fra.com

Grep début de ligne

J'ai un fichier avec le contenu suivant:

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

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

10
user3069326

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

  1. grepname__

    grep '^(' file
    
  2. sedname__

    sed -n '/^(/p' file
    
26
terdon

Utiliser Perl

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

Sortie:

(((jfojfojeojfow 
(((jfojfojeojfow

Explication (partie regex)

  • /^\(/

    • ^ assert la position au début de la chaîne
    • \( correspond au caractère ( littéralement
6
A.B.

Voici un bash one liner:

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 =~ ^\( ]].

Utilisation de 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 c'est le cas, la ligne est imprimée.

4
heemayl

awk

awk '/^\(/' testfile.txt

Résultat

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

Python

Comme 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

look est l’un des utilitaires Unix classiques, mais peu connus, qui est apparu il y a longtemps dans la version 7 d’AT & T Unix. De man look:

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

Le résultat:

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

Vous pouvez faire l'inverse.

grep -v '^[^(]' file

ou

sed '/^[^(]/d' file
2
Avinash Raj

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.

1
thedler