
Ich habe folgenden Code:
cat file | grep example | sed 's/http/https/' >> report.txt
Ausgabe dieses Befehls:
https://example.com/page/index.html
Dadurch wird ein Link mit HTTPS zur Datei hinzugefügt. Ich möchte jedoch, dass dieselbe Ausgabe auch "URL" in einer zweiten Datei ersetzt.
Inhalt der zweiten Datei:
TEXT TEXT
TEXT
URL
TEXT TEXT
Gewünschte Änderung in der zweiten Datei:
TEXT TEXT
TEXT
https://example.com/page/index.html
TEXT TEXT
Ist das möglich?
PS: Ich kann den Befehl nicht nochmal wiederholen, da es sich eigentlich nicht um ein einfaches Cat, sondern um einen Upload-Vorgang handelt, der den Befehl startet.
Antwort1
Fürs Protokoll: Sie müssen es nicht cat
und können es grep
auch sed
alleine tun:
sed '/URL/!d;s/http/&s/'
Vorausgesetzt, Sie führen eine Befehlskette aus, die eine einzelne Ausgabezeile erzeugt, können Sie Folgendes tun:
... | tee -a report.txt | sed 's|[\&/]|\\&|g;s|.*|s/URL/&/g|' | sed -f- -i infile.json
Dadurch wird die Ausgabe angehängt, report.txt
aber auch an weitergeleitet, sed
wodurch sie in einen sed
Befehl umgewandelt wird, der dann an einen anderen Befehl weitergeleitet wird, der die Datei direkt sed
bearbeitet ..json
Antwort2
Dies ist die kurze Antwort auf eine kurze Frage:
cat file | grep URL | sed 's/http/https/' | tee -a report.txt | while read $LINE; do
sed --in-place -e "s·URL·$LINE·" thejsonfile.json
done
·
Stellen Sie sicher, dass Sie alle drei im Skript durch ein Zeichen ersetzen, sed
das nicht in enthalten ist $LINE
, oder belassen Sie es als ·
(mittlerer Punkt).
EDIT: Ich habe gerade aus einer anderen Frage gelernt, dass das Weiterleiten in eine while read
Schleife aus Leistungsgründen und anderen Gründen als schlechte Praxis gilt. Damit wird Ihre Arbeit erledigt, also lasse ich das hier.
Antwort3
sed -n '/example/s/http/&s/p' file | tee -a report.txt |\
sed -e 'G;s/$/./;G;s/$/wq/;h;s|.*|/URL/c|;G' | ed -s - json_file
Wir erstellen einen ed
Code basierend auf der ersten Ausgabe und verwenden diesen, um die JSON-Datei zu bearbeiten.