Tout mettre en ligne mais correspondre à grep

2

J'essaie de tout obtenir sur la ligne correspondante en excluant le match en utilisant grep.

Si j'ai

#define VERSION 0.1

La commande doit faire écho

0.1

J'ai vu cette question, mais je ne veux que des choses sur la même ligne.

J'ai lu la page de manuel, mais je ne vois rien qui corresponde à mon cas d'utilisation spécifique. Une commande différente serait-elle éventuellement meilleure que grep pour cela?

Zach Latta
la source
Donc vous cherchez #define VERSION?
Dennis
Ouais. Ce que je fais en particulier, c'est exécuter une commande shell pour obtenir ce que VERSION est défini et le stocker dans une macro dans un Makefile.
Zach Latta

Réponses:

2

Un moyen simple d'y parvenir est de transmettre la sortie de grep à sed:

command | grep "^#define VERSION" | sed 's/^#define VERSION //'

Vous pouvez obtenir le même résultat en utilisant seulement sed si vous utilisez le -ncommutateur et le pmotif (c.-à-d., Print) pour l'expression régulière. Ceci remplacera et imprimera uniquement les lignes qui ont été modifiées:

command | sed -n 's/^#define VERSION //p'

Voir: man sed

Dennis
la source
1

Si votre version de grep prend en charge Perl regex, vous pouvez le faire comme suit:

grep -oP '(?<=#define VERSION )[^ ]*$'

Sinon, utilisez deux invocations de grep:

grep '#define VERSION' | grep -o '[^ ]*$'
Thor
la source