Si vous avez GNU grep, vous pouvez utiliser son -o
option pour rechercher une expression régulière et ne produire que la partie correspondante. (Les autres implémentations grep ne peuvent afficher que la ligne entière.) S'il y a plusieurs correspondances sur une ligne, elles sont imprimées sur des lignes distinctes.
grep -o '\[[0-9]*\]'
Si vous ne voulez que les chiffres et non les crochets, c'est un peu plus difficile; vous devez utiliser une assertion de largeur nulle: une expression rationnelle qui correspond à la chaîne vide, mais uniquement si elle est précédée ou suivie, selon le cas, d'un crochet. Les assertions de largeur nulle ne sont disponibles qu'en syntaxe Perl.
grep -P -o '(?<=\[)[0-9]*(?=\])'
Avec sed, vous devez désactiver l'impression avec -n
, faire correspondre la ligne entière et ne conserver que la partie correspondante. S'il y a plusieurs correspondances possibles sur une ligne, seule la dernière correspondance est imprimée. Voir Extraire une expression régulière correspondant à 'sed' sans imprimer les caractères environnants pour plus de détails sur l'utilisation de sed ici.
sed -n 's/^.*\(\[[0-9]*\]\).*/\1/p'
ou si vous ne voulez que les chiffres et non les crochets:
sed -n 's/^.*\[\([0-9]*\)\].*/\1/p'
Sans grep -o
, Perl est l'outil de choix ici si vous voulez quelque chose à la fois simple et compréhensible. Sur chaque ligne ( -n
), si la ligne contient une correspondance pour \[[0-9]*\]
, imprimez cette correspondance ( $&
) et une nouvelle ligne ( -l
).
perl -l -ne '/\[[0-9]*\]/ and print $&'
Si vous ne voulez que les chiffres, mettez des parenthèses dans l'expression régulière pour délimiter un groupe et imprimez uniquement ce groupe.
perl -l -ne '/\[([0-9]*)\]/ and print $1'
PS Si vous souhaitez uniquement exiger un ou plusieurs chiffres entre les crochets, changez [0-9]*
en [0-9][0-9]*
ou [0-9]+
en Perl.
[number]
" signifie sauf[0-9]