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 bash
une 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
look
est 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.