bash/sed (spezielle Zeichen)

05/10/2007 - 12:16 von Ralph Stahl | Report spam
Moin,

ich habe eine Datei zum Probieren test.txt mit einer Zeile aus einer
größeren Aufgabe:

isset($_SESSION['SESSID']) && ($_SESSION['SESSID'] != session_id())

Diese Zeile möchte ich àndern in

!(isset($_SESSION['SESSID']) && ($_SESSION['SESSID'] == session_id()))

Dazu schreibe ich:

sed -i -e "~s/isset($_SESSION['SESSID']) && ($_SESSION['SESSID'] !=
session_id())/!(isset($_SESSION['SESSID']) && ($_SESSION['SESSID'] ==
session_id()))/g" test.txt

Der Erfolg ist:

bash: !: event not found

Ich habe versuichsweise die !-Zeichen escaped (\!), was eigentlich
quatsch ist, da ! kein spezielles Zeichen für einen Regex ist. Damit
làuft es zwar durch, aber es wird nichts ersetzt.

Um das Problem zu reduzieren, hab ich in test.txt geschrieben

a=b

und dann

sed -i -e "~s/=/!=/g" test.txt

ausgeführt, womit richtig a!=b draus wird. Am ! an sich kann es also
kaum liegen. Warum geht es mit dem langen String nicht?

(Sinn der Übung: ich habe ich ein paar hundert Files den falschen String
stehen und will mir also über "find" etwas zusammenbauen, was den gegen
den richtigen tauscht).

Bitte! Danke :-).
Ralph
 

Lesen sie die antworten

#1 Klaus Zerwes
05/10/2007 - 13:11 | Warnen spam
Ralph Stahl wrote:
Moin,

ich habe eine Datei zum Probieren test.txt mit einer Zeile aus einer
größeren Aufgabe:

isset($_SESSION['SESSID']) && ($_SESSION['SESSID'] != session_id())

Diese Zeile möchte ich àndern in

!(isset($_SESSION['SESSID']) && ($_SESSION['SESSID'] == session_id()))

Dazu schreibe ich:

sed -i -e "~s/isset($_SESSION['SESSID']) && ($_SESSION['SESSID'] !=
session_id())/!(isset($_SESSION['SESSID']) && ($_SESSION['SESSID'] ==
session_id()))/g" test.txt

Der Erfolg ist:

bash: !: event not found



Schnellschuß

sed 's/x/y/g' verwenden (single statt double quotes
dann mußt du die singlequotes im String escapen

Mit " evaluirt die Shell die $-Gedönse


Bitte! Danke :-).
Ralph


Gerne
Klaus

Klaus Zerwes
http://zero-sys.net

Ähnliche fragen