Vinzenz Mai: bash: Ausgabe in einer Zeile

Beitrag lesen

Hallo,

grep xyz ./datei.h |awk '{print $3}'
gibt folgendes aus:

mit welchem Dateiinhalt? Warum fehlt der? Warum machst Du es potentiellen Helfern so schwer?
ich hielt es für unnötig den kompletten Quelltext (81k) der Datei zu posten

*seufz*
Natürlich nicht, sondern eine Beispieldatei mit vier oder fünf Zeilen, so wie es sinngemäß in Tipps für Fragende steht. Hier im speziellen Fall bin ich nicht besonders vertraut mit awk. D.h. Du baust eine unnötige Hürde auf. Sicher kann dieses Problem auch auf die gleiche Weise gelöst werden, wenn man die Ausgabe von cat

beispiel.h
4
2
2

ins gleiche Format bringt. Befriedigender ist es jedoch, die richtige Befehlsverkettung verwenden zu können. Ich habe mir die Mühe gemacht, in den man-pages nachzulesen, was awk da macht und mir eine passende Beispieldatei zusammengestellt. Diese Mühe hättest Du mir ersparen können. Das hätte Engagement Deinerseits gezeigt, was sich bei Fragen in Foren in aller Regel auszahlt.

Du suchst ja auch nicht nach

xyz

und die Datei heißt auch nicht

datei.h

das ist eine .h Datei

grep __GNU_MP_VERSION ./gmp.h
#define __GNU_MP_VERSION 4
#define __GNU_MP_VERSION_MINOR 2
#define __GNU_MP_VERSION_PATCHLEVEL 2

und Du suchst nach __GNU_MP_VERSION ;-)

ich möchte die Ausgabe jedoch wie folgt haben:
4.2.2

gibt es ein Kommando, welches mir die Ausgabe so zurück gibt?

Zurück zum Problem. Ein möglicher Weg, es zu lösen, geht über Kommandosubstitution mit Backticks oder $(befehlskette).

Wenn Du die Kommandos, deren Ausgabe Du haben willst, _nicht_ in Anführungszeichen packst, dann hat dies den an dieser Stelle wünschenswerten Nebeneffekt, dass die Zeilenendenzeichen wegfallen.

Schau' Dir die Ausgabe von

echo $(grep __GNU_MP_VERSION /path/to/headerfile | awk '{print $3]')

an. Du wirst feststellen, dass sie

4 2 2

lautet. Nun kannst Du ganz einfach die Ausgabe durch tr pipen und das Leerzeichen durch den Punkt ersetzen und bekommst somit das gewünschte Resultat:

echo $(grep __GNU_MP_VERSION /path/to/headerfile | awk '{print $3]') | tr -s ' ' '.'
  4.2.2

Freundliche Grüße

Vinzenz, der auch wieder einiges dazugelernt hat