J'ai un fichier avec le contenu suivant:
(((jfojfojeojfow
//
hellow_rld
(((jfojfojeojfow
//
hellow_rld
Comment extraire chaque ligne commençant par une parenthèse?
J'ai un fichier avec le contenu suivant:
(((jfojfojeojfow
//
hellow_rld
(((jfojfojeojfow
//
hellow_rld
Comment extraire chaque ligne commençant par une parenthèse?
Réponses:
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.
awk '/^\(/' testfile.txt
Résultat
$ awk '/^\(/' testfile.txt
(((jfojfojeojfow
(((jfojfojeojfow
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
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
Vous pouvez faire l'inverse.
grep -v '^[^(]' file
ou
sed '/^[^(]/d' file
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.
(, pas seulement celles qui commencent par un.