2016-07-22 16 views
0

Die folgenden works in Javascript als Übereinstimmung zu ignorieren:Spiel Wort gleiches Wort mit zusätzlichen Zeichen in sed

[^\$]fileref.* 

jedoch in sed den Regex nichts übereinstimmen. Ich möchte eine variable Referenz in einer Bash-Datei ersetzen, während ich die Variablenkennung ignoriere. Die Prämisse ist, dass ich eine Standardplatzhalterdatei habe, die von einem Shellskript mit Sed-i aktualisiert werden muss. Ich kann keinen Grund finden, warum sed ein Problem mit diesem Ausdruck hat.

Sed Testbeispiel:

echo -e 'fileref=old\n./executable $fileref' | sed 's/[^\$]fileref.*/fileref=replaced/g' 

Output von gnu Sed (ubuntu oder CENTOS) wenn keine Übereinstimmung gefunden wird:

fileref=old 
./executable $fileref 

gewünschter Ausgang:

fileref=replaced 
./executable $fileref 
+0

sed arbeitet zeilenweise, es gibt kein Zeichen vor "fileref". Wenn Sie den Anfang einer Zeile anpassen möchten, verwenden Sie den Anker '^'. Abgesehen davon müssen Sie in einer Zeichenklasse nicht dem '$' entkommen. –

Antwort

2

"No $ vor fileref" kann wie folgt ausgedrückt werden: „ein Zeichen das ist kein $ oder kein Zeichen überhaupt vor fileref "

echo -e 'fileref=old\n./executable $fileref' | sed 's/\([^$]\|^\)fileref.*/\1fileref=replaced/g' 

Das gleiche mit Javascript:

0
echo -e 'fileref=old\n./executable $fileref' | sed 's/^fileref.*$/fileref=replaced/g' 

gibt folgende

fileref=replaced 
./executable $fileref 

durch bei der Umsetzung [^ \ $] Sie sagen, für $ am Anfang einer Zeile suchen