2017-02-11 2 views
1

Die folgende Codezeile fügt am Anfang und am Ende einer Zeile zwei verschiedene feste Strings hinzu.Sed, wie man eine Schnur durch eine variable und eine Zeichenkombination ersetzt?

sed -i 's/.*/somefixedtext,&,someotherfixedtext/' ${f} 

somefixedtext,20,30,10,50,someotherfixedtext 

Ich möchte die Ausgabe mit einer Variablen, die mir unten, anstatt was oben ist;

HELLO,somefixedtext,20,30,10,50,someotherfixedtext 

Einige Variationen versucht, aber alle fehlgeschlagen;

Wie kann ich eine Stringvariable am Anfang der Zeile, kombiniert mit einem Fixedstring, in Sed einbauen?

Antwort

2

Sed ist eine schlechte Wahl, wenn die Ersatzzeichenfolge aus einer Variablen ist, weil es die Variable als sed Befehl und nicht als Zeichenkette behandelt, so wird es brechen, wenn die Variable Sonderzeichen wie / oder & oder ähnliches enthält.

Awk ist besser für diese Aufgabe geeignet, zum Beispiel wie:

$ cat file 
20,30,10,50 

$ var=hello 

$ awk -F, -v prefix="$var" -v OFS=, '{print prefix, "sometext", $0, "somethingelse"}' file 
hello,sometext,20,30,10,50,somethingelse 

Für inplace Modifikation benötigen Sie eine aktuelle Version von GNU awk, und die -i inplace Argumente.

Für das, was es wert ist, würde der Befehl angezeigt, wenn Sie die doppelte Variable zitiert zu arbeiten, außerhalb der Apostrophe, aber es wäre ein bisschen buggy sein:

VARIABLE="HELLO" 
sed -i 's/.*/'"$VARIABLE"',somefixedtext,&,someotherfixedtext/' ${f} 
+1

Vielen Dank, die Version Werke Sed sehr gut. Diese zwei einfachen Zitate aßen meine 2 Stunden :) –

Verwandte Themen