2016-08-25 2 views
2

Neu bei sed, so tragen Sie sich bitte mit mir ...sed Befehl funktioniert nicht, wenn ein Komma vorhanden ist

ich eine PHP-Datei, die die folgende Zeile enthält:

define('TARGET_A','044'); 

Id wie zu finden diese Zeile und ersetzen sie sie durch die folgenden mit sed:

define('TARGET_K','076'); 

ich habe versucht:

$ sed -i 's/define\(\'TARGET_A\',\'044\'\)\;/define\(\'TARGET_K\',\'076\'\)\;/' myfile.php 

Ich habe mehrere Varianten ausprobiert, versucht, die Pars und Entfernen des Semikolons zu entkommen, scheint nichts

jede Hilfe sehr dankbar überhaupt,

dank

Antwort

0

Sie können nicht ' s in einem ' separierten Skript entkommen, so dass Sie mit '\'' schälen müssen entkommen zurück, wenn Sie ein ' benötigen. Sie könnten versucht sein, " zu verwenden, um das Skript stattdessen zu begrenzen, aber dann öffnen Sie es für die Shell-Variablenerweiterung usw. Daher müssen Sie vorsichtig sein, was in Ihrem Skript passiert und einige Zeichen entkommen lassen, damit die Shell sie expandiert . Es ist viel robuster (und in der Regel macht Ihre Skripte einfacher) zu bleiben, nur um einfache Anführungszeichen und die Flucht zurück, nur für die Teile zu schälen Sie müssen:

$ sed 's/define('\''TARGET_A'\'','\''044'\'');/define('\''TARGET_K'\'','\''076'\'');/' file 
define('TARGET_K','076'); 
+1

Upvoted - das ist sicherer. –

5

zu arbeiten, die eine Menge zu entkommen ist. Wie wäre es mit ... überhaupt nicht zu entkommen?

sed -i '.bak' "s/define('TARGET_A','044');/define('TARGET_K','076');/" myfile.php 

Beispiel:

[email protected]:~⟫ cat myfile.php 
define('TARGET_A','044'); 
[email protected]:~⟫ sed -i '.bak' "s/define('TARGET_A','044');/define('TARGET_K','076');/" myfile.php 
[email protected]:~⟫ cat myfile.php 
define('TARGET_K','076'); 
+0

danken Ihnen für diese schnelle Antwort! Ich kann es nicht einmal akzeptieren, aber du hast so schnell geantwortet! hah! Du ROCKSTOCK. Das hat funktioniert! – dsrupt

+0

Heres eine härtere Frage ... Gibt es eine Möglichkeit, die Zahl automatisch zu erhöhen? mit oder ohne dieses führende 0 Geschenk? – dsrupt

+1

@dsrupt nein, das kann nicht mit sed getan werden, aber es wäre trivial, wenn Sie awk anstelle von sed verwenden würden. Das ist wirklich eine ganz andere Anforderung, wenn Sie also eine Follow-up-Frage mit präzisen, testbaren Beispieleingaben und erwarteten Ausgaben posten und dieses Mal Ihre Ziellinie (n) im Kontext anzeigen. –

1

Das ist für mich gearbeitet:

$sed -i "s/define('TARGET_A','044');/define('TARGET_K','076');/" myfile.php 

änderte ich das Argument String-Begrenzer, um es einfacher zu machen.

Verwandte Themen