Ich habe eine Datei mit Eingabewerten in der Form: input-prefix:value
.
Ich muss input-prefix
zweimal durch unterschiedliche Substitutionen ersetzen und es an einen Befehl wie übergeben my-command replace1-prefix:value replace2-prefix:value
. Ist dies mit einem einzigen Befehl möglich oder muss ich es skripten?
Mit einem Wert ist es einfach
cat my-input-file | sed 's/input-prefix/replace1-prefix/' | xargs -r my-command
TIA für jegliche Unterstützung,
W.
Antwort1
Sie können Teile eines Musters mit gruppieren \(\)
und später darauf verweisen \1
(oder \2
..., \9
wenn Sie mehrere Gruppen in einem Muster haben):
s/input-prefix:\(.*\)/replace1-prefix:\1 replace2-prefix:\1/
Antwort2
Auch mit mehreren Werten ist es einfach. Erstens können Sie den cat-Befehl in Ihrer Pipe überspringen, da sed aus der Datei liest und die Ausgabe in druckt STDOUT
. Und sed
funktioniert so, wie @Philippos es beschrieben hat (und \1
wird zweimal verwendet, da es zur ersten Erfassungsgruppe gehört). Entfernen Sie einfach das Echo im xargs-Befehl, um Ihren Befehl auszuführen. Wenn Sie den aufgerufenen Befehl sehen möchten, können Sie den Parameter hinzufügen, -t
um den Befehl anzuzeigen oder -p
ihn interaktiv auszuführen. Daher müssen Sie vor dem Ausführen des Befehls „yes“/„no“ angeben.
user@pc:/tmp$ cat inputfile.txt
input-prefix1:value1
input-prefix:value
input-prefix2:value2
user@pc:/tmp$ sed 's/^input-prefix:\(.*\)$/replace1-prefix:\1\nreplace2-prefix:\1/g' inputfile.txt
input-prefix1:value1
replace1-prefix:value
replace2-prefix:value
input-prefix2:value2
user@pc:/tmp$ sed 's/^input-prefix:\(.*\)$/replace1-prefix:\1\nreplace2-prefix:\1/g' inputfile.txt | xargs -r echo my-command
Kurzer Hinweis: Dies setzt voraus, dass Ihr Eingabepräfix das erste Element in der Zeile ist, die Sie ersetzen möchten, und der Wert der gesamte Rest der Zeile hinter dem Doppelpunkt ist. Außerdem ersetzt der g
Modifikator im Befehl alle Vorkommen Ihres innerhalb des .sed
input-prefix:
inputfile.txt