Uzyskaj wszystko online, ale dopasuj do grep

2

Próbuję uzyskać wszystko w dopasowanej linii oprócz meczu za pomocą grep.

Jeśli mam

#define VERSION 0.1

Polecenie powinno się powtórzyć

0.1

Widziałem to pytanie, ale chcę tylko rzeczy w tej samej linii.

Czytam stronę podręcznika, ale nie widzę nic, co pasuje do mojego konkretnego przypadku użycia. Czy inne polecenie byłoby prawdopodobnie lepsze niż grep?

Zach Latta
źródło
Więc szukasz #define VERSION?
Dennis
Tak. W szczególności wykonuję polecenie powłoki, aby uzyskać definicję VERSION, i przechowuję je w makrze w pliku Makefile.
Zach Latta

Odpowiedzi:

2

Łatwym sposobem na osiągnięcie tego jest sipowanie wyjścia grepa do sed:

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

Możesz osiągnąć ten sam wynik, używając tylko sed, jeśli użyjesz -nprzełącznika i pwzorca (tj. Drukuj) dla wyrażenia regularnego. Spowoduje to zastąpienie i wydrukowanie tylko zmodyfikowanych linii:

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

Zobacz: man sed

Dennis
źródło
1

Jeśli twoja wersja grep obsługuje perl regex, możesz to zrobić w następujący sposób:

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

W przeciwnym razie użyj dwóch wywołań grep:

grep '#define VERSION' | grep -o '[^ ]*$'
Thor
źródło