2017-06-27 6 views
0

Ich habe eine Datei mit Anwendungen und deren Versionsnummer. Und ich möchte ihre Version von einem automatisierten Skript ändern. Hier ist ein Beispiel der DateiBash ersetzt den Wert der Spalte durch einen anderen

bm_app:2.2.9 
sm_app:7.0.5 

Jetzt habe ich eine Variable haben, die die neue Version von bm_app speichert.

echo $fg 
5.7.8 

Wenn ich jetzt versuchen, die Version von bm_app wie dies unter Verwendung dieser Variablen zu ersetzen, wird eine Null auf den kleineren Teil der Version angehängt, wie unten gezeigt.

grep bm LATEST_APP_VERSION.md | awk -F ':' '{print $1":"'$fg'}' 
bam_app:5.70.8 

Jetzt möchte ich die unnötige Null nicht an meine Ausgabe angehängt werden. Ich habe versucht das "printf" zu formatieren, aber es ist nicht gelungen. Jede Hilfe wird sehr geschätzt.

Ashutosh

Antwort

1
awk -v var=$fg -F: '/bm/ {print $1":"var}' filename 

Pass Sie Variable mit -v und verwenden Sie einen regulären Ausdruck awk für bm Einträge in awk zu suchen, wie zu verwenden grep entgegen.

+0

vielen Dank. Es funktionierte einwandfrei. Hast du eine Ahnung, warum in meinem awk-Befehl eine Null angehängt wurde? Es wäre gut zu wissen, warum sich awk so benahm. –

1

Sie können das Flag -v awk verwenden, um Ihre Variable zu übergeben.

Beispiel Verwendung:

#!/bin/bash 
BM="bm_app:2.2.9" 
fg="5.7.8" 
echo $BM | awk -v x=$fg -F ':' '{print $1":"x}' 

Output:

bm_app:5.7.8 
1

Mit einzelnen Sed Befehl:

sed 's/\(bm_app:\).*/\1'"$fg"'/' LATEST_APP_VERSION.md 

die Ausgabe:

bm_app:5.7.8 
sm_app:7.0.5 
Verwandte Themen