3 Stimmen

Shell-befehl, um einen Teil einer Zeichenfolge abzuschneiden/auszuschneiden

Ich habe eine Datei mit folgendem Inhalt. Ich habe den Befehl bekommen, die Versionsnummer daraus auszudrucken. Aber ich muss den letzten Teil in der Versionsdatei abschneiden

file.spec:

Version: 3.12.0.2

Verwendeter Befehl:

VERSION=($(grep -r "Version:" /path/file.spec | awk  '{print ($2)}'))

echo $VERSION

Aktuelle Ausgabe : 3.12.0.2

Gewünschte Ausgabe : 3.12.0

9voto

Adrian Frühwirth Punkte 38808

Bei dieser einfachen Aufgabe besteht absolut keine Notwendigkeit für externe Tools wie awk, sed usw., wenn Ihre Shell POSIX-konform ist (was sie sein sollte) und Parametererweiterung unterstützt:

$ cat file.spec
Version: 3.12.0.2
$ version=$(

4voto

girardengo Punkte 686

Versuchen Sie dies:

VERSION=($(grep -r "Version:" /path/file.spec| awk  '{print ($2)}' | cut -d. -f1-3))

Sie schneiden den Zeichenfolge mit einem Feldtrennzeichen (-d) zerteilen, dann wählen Sie das gewünschte Feld mit dem -f Parameter aus.

2voto

Chris Seymour Punkte 79952

Sie könnten dieses einzelne awk Skript verwenden awk -F'[ .]' '{print $2"."$3"."$4}':

$ VERSION=$(awk -F'[ .]' '{print $2"."$3"."$4}' /path/file.spec)

$ echo $VERSION
3.12.0

Oder dieses einzelne grep

$ VERSION=$(grep -Po 'Version: \K\d+[.]\d+[.]\d' /path/file.spec)

$ echo $VERSION
3.12.0

Aber Sie brauchen nie grep und awk zusammen.

1voto

Kent Punkte 180747

Wenn Sie nur eine einzelne Datei mit Grep durchsuchen, ergibt -r keinen Sinn.

Außerdem sollte dieses Grep basierend auf der Ausgabe Ihrer Befehlszeile funktionieren:

grep -Po '(?<=Version: )(\d+\.){2}\d+' /path/file.spec

gibt Ihnen:

3.12.0

Das \K ist auch schön. Funktioniert für feste/nicht feste Längen-Look-behind. (seit PCRE 7.2). Es gibt eine andere Antwort dazu. aber ich finde, Look-behind ist einfacher zu lesen, wenn die Länge fest ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X