einzelner Befehl zum Sed und zweimalige Verwendung des Eingabewerts in unterschiedlicher Form

einzelner Befehl zum Sed und zweimalige Verwendung des Eingabewerts in unterschiedlicher Form

Ich habe eine Datei mit Eingabewerten in der Form: input-prefix:value.

Ich muss input-prefixzweimal 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..., \9wenn 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 sedfunktioniert so, wie @Philippos es beschrieben hat (und \1wird 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, -tum den Befehl anzuzeigen oder -pihn 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 gModifikator im Befehl alle Vorkommen Ihres innerhalb des .sedinput-prefix:inputfile.txt

verwandte Informationen