Ich schreibe ein Skript (Bash / Kommandozeile) und möchte den Paketnamen bis .el7 extrahieren können
x=dbus-sharp
(Ein Beispiel für einen Paketnamen - der sich ändert)
Beispiel-Textdatei:
Building dbus-sharp-0.7.0-11.fc22 for epel7
Created task: 7970206
...
0 free 1 open 1 done 0 failed
7970225 buildArch (dbus-sharp-0.7.0-11.el7.src.rpm, ppc64): free
7970223 buildArch (dbus-sharp-0.7.0-11.el7.src.rpm, x86_64): open (buildhw-03.phx2.fedoraproject.org)
...
im grunde will ich jetzt
y=dbus-sharp-0.7.0-11.el7
Es ist egal, ob ich grep, sed oder awk verwenden muss.
Ich hatte kein Glück, nach einer ähnlichen Lösung zu suchen.
Beispiele, die ich ausprobiert habe:
[me@h dbus-sharp]$ echo "Here is a String" | grep -Po '(?<=(Here )).*(?= String)'
is a
[me@h dbus-sharp]$ cat scratchdbus-sharp | grep -Po '(?<=(dbus)).*(?= el7)'
(no output?)
[me@h dbus-sharp]$ cat scratchdbus-sharp | awk '/dbus/,/el7/'
(it dumps the whole text file?)
[me@h dbus-sharp]$ sed -n "/dbus/,/el7/p" scratchdbus-sharp
(again the whole text file is dumped)
[me@h dbus-sharp]$ grep -m 1 "dbus-sharp" scratchdbus-sharp
Building dbus-sharp-0.7.0-11.fc22 for epel7
Ich denke, ich sollte auch beachten, dass ep el7 in der (den) Textdatei (en) enthalten sein wird, was ebenfalls eine Übereinstimmung mit 'el7' hervorruft, was die Dinge kompliziert.
grep -m 1 -oP $(echo $x)'[^ ]+\.el7' scratchgio-sharp
Kannst du bitte erklären, wie du darauf gekommen bist, dieses [^] + \ zu benutzen? Oder was macht [^] + \? Vielen Dank.