Nehmen wir an, ich erhalte die folgende Ausgabe, nachdem ich ein Bash-Skript in der CLI ausgeführt habe (dieser Text wird also im Terminal angezeigt):
POST https://mycompany.com/ COOKIE='BLABLABLABLABLA' HOST='ANYIPADDRESS' FINGERPRINT='sha256:BLABLABLABLA'
Wie kann ich den Inhalt von
COOKIE
(nur den Text zwischen'
und'
) in einer separaten Datei speichern?
Darüber hinaus sollte der erwähnte Text an einer bestimmten Stelle in diese externe Datei eingefügt werden.
Der bereits vorhandene Dateiinhalt sieht folgendermaßen aus:
[global] Name = Name of VPN connection [provider_openconnect] Type = OpenConnect Name = Name of VPN connection Host = IP-address Domain = Domain name OpenConnect.Cookie = >>>INSERT CONTENT OF THE COOKIE HERE<<< OpenConnect.ServerCert = sha256:BLABLABLABLA
Wie ist das möglich?
Antworten:
Diese Art von Dingen ist nicht generischer Natur, aber spezifisch, obwohl der Ansatz generisch ist
Ich gehe davon aus, dass Sie die
OpenConnect.Cookie =
Zeile durch ersetzen möchtenOpenConnect.Cookie = BLABLABLABLABLA
Um zuerst die erforderliche Zeichenfolge zu erstellen, können Sie diese verwenden
Hier verwende ich die Befehlssubstitution, um zuerst die erforderliche Zeichenfolge zu erstellen
und dann Ersetzen der erforderlichen Zeile durch diese erforderliche Zeichenfolge
quelle
sed
.Sie können den Cookie mit einer Kombination aus Bashs Lesen und
grep
:Dies verwendet die Prozessersetzung, um die Ausgabe von
some-command | grep '^COOKIE')
to zu speisenread
. MitIFS="='"
teilen wir die Eingabe auf'
und verwerfen das erste Element von split (COOKIE=
) (und den verbleibenden Text nach dem schließenden Anführungszeichen), während wir das zweite in dercookie
Variablen speichern .Dann können wir
sed
den Text ersetzen:Dies hängt jedoch davon ab, dass der Cookie-Text keine Sonderzeichen wie enthält
&
.quelle
read -r _ cookie _
jeden Müll erfassen, der dem zweiten einfachen Anführungszeichen folgt.Du könntest benutzen:
Wo:
file
ist die vorhandene Datei mit dem in der Frage beschriebenen Inhalt.command
ist Ihr Befehl, der den Text auf dem Terminal druckt.grep "^COOKIE="
sucht nach einer Zeile beginnend mitCOOKIE=
$COOKIE
in der aktuellen Shell gesetzt.sed
Befehl ersetzt dann die Zeile in der Zieldatei durch den Inhalt der Variablen$COOKIE
.quelle
Wie wäre es mit
Es erstellt eine "
sed
Skriptdatei" im laufenden Betrieb, indem die relevanten Daten aus Ihrem CLI-Befehl extrahiert / massiert werden, und führt diese Skriptdatei mithilfe der "Prozessersetzung" in einem zweitensed
Aufruf aus.quelle
Diese Antwort basiert auf dem Kommentar von @MSalters . Die verwendete Shell ist Bash.
Alternative Lösung (mit GNU
expr
)Diese Lösung funktioniert, wenn nur ein übereinstimmendes Ergebnis vorliegt.
quelle