2009-05-12 20 views
1

In Ordnung, ich weiß, das ist eine einfache Frage, aber ich kann nicht scheinen, diese sed Befehl zu arbeiten. Ich versuche, eine Textdatei zu erhalten und ein Bit davon vom Platzhaltertext zu einem Studiencode zu ersetzen. Der Studiencode, durch den er ersetzt wird, wird beim Ausführen des Skripts mit Argumenten in das Skript übergeben. Das Problem ist, wenn ich versuche, den Platzhaltertext durch die Variable $ study zu ersetzen, ersetzt er es durch eine wörtliche "$ study".Get sed zu ersetzen Text mit Argument

Gerade jetzt meine Argumente wie folgt festgelegt:

Export Studie = 1 $

Export tag = $ 2

Exportmodus = $ 3

Export select = 4 $

Mein sed Befehl sieht so aus:

sed -i.backup -e 's/thisisthestudycodereplacethiswiththestudycode/$ Studie /' freq.spx

Gibt es eine einfache Möglichkeit, sed des Erhaltens nicht an dem buchstäblichen $ Studie aussehen, oder würde Ist es an dieser Stelle besser, es anders zu machen?

+0

Denken Sie daran, dass Sie $ study in einen 'sed' Befehl injizieren. Was bedeutet, dass ** die sed-Semantik folgen muss. Das bedeutet, dass das Trennzeichen (/) mit einem Backslash und mehrere andere Metazeichen gelöscht werden müssen. Machen Sie nicht den Fehler, dass "Studieren" willkürliche Daten sein darf oder dass dies ein Fehler ist. – lhunath

+0

Ja, dieses Skript wird von einem anderen Skript ausgeführt, das von einer Webseite aufgerufen wird. Wenn die Eingabe diesen Punkt erreicht, wird alles bereinigt und überprüft. –

Antwort

12

Verwenden Sie doppelte Anführungszeichen anstelle von einfachen Anführungszeichen.

Weil ' Quotierung verhindert Shell Variablenerweiterungen, und " Zitat nicht.

+0

Nun, das war es. Danke für die Hilfe! –

+1

Danke für die Antwort, @dmckee. –

1

Sie werden wahrscheinlich nicht in dieses Problem laufen, aber nur für den Fall ... ist

Paul Antwort etwas suboptimal, wenn $study Schrägstriche oder andere Zeichen mit besonderer Bedeutung zu sed enthalten könnte.

mv freq.spx freq.spx.backup && \ 
    awk -v "study=$study" '{ 
     gsub(/thisisthestudycodereplacethiswiththestudycode/, study); 
     print; 
    }' freq.spx.backup > freq.spx 

Obwohl umständlich (hah, pun!), Wird diese Arbeit immer unabhängig von $study ‚s Inhalt.

0

versuchen Sie dies ................... sed -e 's /% d /' $ a '/ g' amar.htm, amar.htm haben die Zeichenfolge "% d", die tatsächlich ersetzt werden soll, und "a" hat die zu ersetzende Zeichenfolge.