2016-11-10 13 views
2

Ich versuche, um SED einen String mit AWK RohrAWK Rohrausgang SED zu ersetzen

grep pdo_user /html/data/_default_/configs/application.ini | awk '{print $3}' | sed -i 's/$1/"username"/g' /html/data/_default_/configs/application.ini 

zu ersetzen, aber gefunden Zeichenfolge nicht

Ausgang für

grep pdo_user /html/data/_default_/configs/application.ini | awk '{print $3}'

ersetzt

ist

"root"

Irgendwelche Tipps dazu?

+0

Siehe auch: [Unterschied zwischen einfachen und doppelten Anführungszeichen in Bash] (http: //stackoverflow.com/q/6697753/3776858) – Cyrus

+0

Aber '$ 3' von' AWK' ist ein String '" root "' den ich jedes Mal ersetzen muss mit '" benutzername "' – JackTheKnife

+2

Ich schlage vor, 's zu ersetzen/$ 1/"username"/g'' von ''s /'" $ 1 "'/" username "/ g''. '$ 1' sollte keine Sonderzeichen enthalten, die sed als Befehle interpretieren könnte. – Cyrus

Antwort

0

Arbeitslösung basierend auf Shelter Tipp mit AWK und SED

sed -i 's/'$(awk '/pdo_user/{print $3}' /path/to/application.ini)'/"username"/' /path/to/application.ini 
2

Ich schlage vor, awk und mv zu verwenden:

awk '/pdo_user/ && $3=="\"root\"" {$3="\"username\""}1' /path/to/application.ini > /path/to/application.tmp 
mv /path/to/application.tmp /path/to/application.ini 
+0

Aber 'pdo_user' könnte anders sein als' "root" 'was nur in meinem Fall war, aber Beispiel ist gut genug, um ohne die Anweisung' && $ 3 == "\" root \ "" 'zu ersetzen – JackTheKnife