2016-09-28 5 views
0

Ich versuche, ein Skript zu schreiben, das eine Ganzzahl in einer Konfigurationsdatei erhöht. Ich versuche grep zu verwenden, um den aktuellen Wert zu finden:Wie verwende ich grep, um Übereinstimmung zu erfassen?

$ grep versionNumber myfile.conf 
      versionNumber 123789 
^ whitespace 
     ^the key I need to match 
         ^the value I need to capture 

Mein gewünschtes Ergebnis ist die 123789 im Beispiel oben zu erfassen.

Was muss ich tun, um diesen Wert zu erfassen?

+0

Was meinst du mit "Capture"? Meinst du "drucken" oder etwas anderes? Was ist die gewünschte Ausgabe des Skripts, das Sie mit der von Ihnen geposteten Eingabedatei schreiben möchten? –

Antwort

2

Sie können dies tun:

grep versionNumber myfile.conf | grep -oE '[0-9]+' 

oder diese

grep versionNumber myfile.conf | awk '{print $2}' 

oder diese

grep versionNumber myfile.conf | cut -d' ' -f2 

oder wenn Sie GNU grep mit Unterstützung für den -P Modus:

grep -oP 'versionNumber \K\d+' myfile.conf 
2

Verwendung awk

awk '/versionNumber/{print $2}' myfile.conf 
+1

Gute, eliminiert die Notwendigkeit, 'Grep' zu verwenden – anubhava

2

Mit grep -oP (pcre Modus);

s='   versionNumber 123789' 
grep -oP 'versionNumber\h+\K\S+' <<< "$s" 

123789 
0

Skript, das eine ganze Zahl in einer Konfigurationsdatei mit Gnu awk v gefunden erhöht 4.1.0+.

Eine Testdatei:

$ cat > file 
foo 
      versionNumber 123789 
bar 

Inplace bearbeiten Funktion verwenden:

$ awk -i inplace '/versionNumber/ {n=index($0,"v"); sub($2,$2+1); printf "%-"n"s\n", $0; next} 1' file 

Das Ergebnis:

$ cat file 
foo 
      versionNumber 123790 
bar 

Erläuterung:

Key die Datei Inplace zu Bearbeitung ist -i inplace

/versionNumber/ {   # if versionNumber found in record 
    n=index($0,"v")  # count leading space amount to n 
    sub($2,$2+1)   # increment the number in second field 
    printf "%-"n"s\n", $0 # print n space before the (trimmed) record 
    next     # skip print in the next line 
} 1      # print all other records as were 
Verwandte Themen