2009-05-28 2 views
0

Ich habe eine Datei mit vielen Zeilen drin. Einer davon sieht so aus:Wie finde ich Informationen in einer Datei mit regulären Ausdrücken unter Linux

set auto_upgrade {1 2 3 4} 

Die Liste kann mehr Zahlen enthalten.

Nun möchte ich in einem Shell-Skript in diese Datei schauen und herausfinden, was die letzte Nummer in der Liste ist. Im obigen Beispiel sollte es 4 finden. Ich habe einen regulären Ausdruck, um das zu finden:

set auto_upgrade {\([0-9] \)*\([0-9]\{1,\}\)} 

Die zweite Gruppe enthält, was ich brauche. Wie verwende ich diesen regulären Ausdruck? Ich versuchte sed, aber es gibt die vollständige Datei mit einer Auslassung zurück. Ich will nur die zweite Gruppe.

Vielen Dank im Voraus, Barth

Antwort

3

Zuerst starten sed im stillen Modus zurück: es sollte nichts gedruckt werden, es sei denn gesagt, dies zu tun (das ist das Flag -n) . Drucken Sie dann nur, wenn eine Ersetzung vorgenommen wurde (das ist der Mustermodifizierer)

sed -n 's/set auto_upgrade {\([0-9] \)*\([0-9]\{1,\}\)}/\2/p' 
0

So etwas wie

cat Dateiname | perl -pe 's /^.* (\ d +) \}/$ 1 /'

sollte funktionieren.

0
sed 's/.*\([0-9]\+\)}/\1/g' 

Das "\ 1" im Ersetzungsabschnitt stimmt mit der Gruppe überein. dh (ohne Berücksichtigung der Fluchten und Zitate)

sed s/pattern1(pattern2)/\1/g 

den angepassten Teil pattern2