SED: So ziehen Sie die Versionszeichenfolge heraus

2417
WilliamKF

Ich möchte sed verwenden, um die Versionsnummer aus dem Befehl zu ziehen:

svnversion --version 

Was gibt Ausgabe wie:

svnversion, version 1.6.2 (r37639) compiled May 10 2009, 12:41:21  Copyright (C) 2000-2009 CollabNet. Subversion is open source software, see http://subversion.tigris.org/ This product includes software developed by CollabNet (http://www.Collab.Net/). 

Und nach der Bearbeitung mit sed möchte ich einfach:

1.6.2 

Bisher habe ich diese Monstrosität (aufgrund meiner Unwissenheit):

svnversion --version | sed s/[\wa-zA-Z//\(\):,]*//g | sed 's/[ ]//' | sed 's/[ ]//' | sed 's/[ ][0-9 ./n/-]*//' 

Ich bin sicher, dass es eine einfache, elegante Lösung gibt, die ein Experte leicht anbieten kann.

2

3 Antworten auf die Frage

5
Darren Hall

Ich weiß, dass dies nicht sed verwendet, aber basierend auf Ihrer Ausgabe ist dies einfacher.

svnversion --version | head -1 | awk '' 

Wenn Sie Perl zur Verfügung haben ...

svnversion --version | perl -lne 'print $1 if /version (\d+.\d+.\d+)/' 
Yep: In UNIX-Befehlszeilen wird das richtige Werkzeug für den Job verwendet. Shannon Nelson vor 14 Jahren 0
4
Dennis Williamson

Versuche dies:

svnversion --version | sed -n '/version/ s/.*version \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/p' 

Es sagt:

  • -n --- Ausgabe nicht automatisch drucken.
  • /version/ --- in Zeilen, die den String "version" enthalten,
  • s/- Ersatz für das, was ist
  • .*versionund .* --- zwischen [einer Folge von null oder mehr eines beliebigen Zeichens, der Zeichenfolge "version", einem Leerzeichen] und [einem Leerzeichen, einer Folge von null oder mehr eines beliebigen Zeichens],
  • \(...\) --- einfangen
  • [0-9]\+ --- eine Folge von einer oder mehreren Ziffern
  • \. --- gefolgt von einer wörtlichen Periode
  • dann mehr Ziffern und Punkte,
  • /\1/ --- Was wurde in der ersten (und in diesem Fall einzigen) Klammergruppe erfasst
  • p --- und explizit ausdrucken.

Da der automatische Druck unterdrückt wird und nur die Zeile ausgewählt wird, die "Version" enthält, werden die anderen Zeilen ignoriert.

1
yanchenko

Eine weitere Möglichkeit, dies ohne zu tun: svnversion --version | head -1 | cut -d" " -f3