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?
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 ^(
:
grep
name__
grep '^(' file
sed
name__
sed -n '/^(/p' file
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éralementVoici 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.
awk '/^\(/' testfile.txt
Résultat
$ awk '/^\(/' testfile.txt
(((jfojfojeojfow
(((jfojfojeojfow
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
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
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.