sed: kein vorheriger regulärer Ausdruck
Ich versuche, führen Sie den folgenden Ausdruck in einem script zu finden, ein Gerät aus und ändern Sie die Felder, die mit dem Gerät in eine html-Datei.
sed -e "s/$OLDTEST/$TESTING/" -e "s/$CURRENTVALU/$NEWSTATUS---$DATE/" -e "s/$PASSORFAIL/$PASSORFAILNEW/" -e "s/$BGCOLOR/$BGCOLORNEW/$POSITION" -e "s/$OLDNOTE/$NOTE/" >> //sysadm/shared/file.tmp
Scheine ich immer ein "no previous regular expression". Irgendwelche Ideen?
debug-log-Ausgabe:
sed -e s//Yes/-e s//Resolved---03-25-13/-e s//Pass/-e s//#348017/1 -e s///
sed: -e expression #5, char 0: no previous regular expression
Dank,
Dave
- Sind Sie versuchen, zu ersetzen, eine wörtliche Folge von z.B.
$OLDTEST
in der Quell-Datei, oder sind OLDTEST, TESTEN, etc. Variablen, die enthält Dinge, die Sie für die Suche/ersetzen? Wenn der ehemalige, verwenden Sie einfache Anführungszeichen, um zu verhindern, dass die expansion, wenn das letztere, dann müssen wir wissen, was diese enthalten die Variablen... - Ich bin versucht, suchen eine Reihenfolge, und dann, sobald ich es finde, tausche ich alle items, die mit Ihr verbundenen
- while read LINE do if echo $LINE |grep $ROUTER - > /dev/null 2>&1 dann CURRENTVALU=
echo $LINE |awk '{print $53}'| sed 's/ //'
echo $LINE | sed -e "s/$OLDTEST/$TEST/" -e "s/$CURRENTVALU/$NEWSTATUS---$DATE/" -e "s/$PASSORFAIL/$PASSORFAILNEW/" -e "s/$BGCOLOR/$BGCOLORNEW/$POSITION," - e "s/$OLDNOTE/$NOTE/" >> /sysadmin/shared/file.tmp - elif echo $LINE |grep-Geräte > /dev/null 2>&1 then echo $LINE | sed -e "s/$CURRENTDEV/$DEV/" -e "s/$CURRENTTOTAL/$TOTAL/" -e "s/$CURRENTPASS/$PASS/" -e "s/$CURRENTFAIL/$FAIL - /" - e "s/$CURRENTPCNT/$PERCNT/" >> /sysadmin/shared/file.tmp else echo $LINE >> /sysadmin/shared/file.tmp fi done < /sysadmin/shared/file.tmp
- Das ist das komplette while-Schleife, die ich verwende, hoffe, dass hilft ein bisschen zu klären.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre debugging-log erzählt Sie die ganze Geschichte 😉
Daher die Fehlermeldung
"no previous regular expression".
Nicht klar über Ihre Erfahrung, so gibt es 2 Lösungen. Daran erinnern, dass im unix - /linux-basierte shells, Zeichenfolgen, die in der dbl-Zitate werden ausgewertet, die für die Variablenersetzung und dass Ihr code, der
"s/$OLDTEST/$TESTING/"
sieht aus wie ein string erfordern variable substitution.Müssen Sie möglicherweise zu tun
dieser code arbeiten.
Wenn Sie wirklich wollen, wird die Zeichenkette '$OLDTEST' werden ersetzt durch die Zeichenkette '$TEST', dann haben Sie "verstecken" die Variablen von der shell-Verarbeitung. Wir tun dies in unix/linux mit der Hilfe von einem Zitat chars., ja, dann ist Ihr Befehlen würde
Aber.. ich sehe nicht ein input-file hier.
so seine wirklich
Ist UND Sie vermutlich nicht wirklich wollen, um an eine vorhandene Datei Anhängen, um etwas mit der Erweiterung tmp, also ...
Mit
>>
bedeutet, als Ihr die Prüfung der Verbesserung Ihrer sed-Skript, Ihren Anhängen werden die Ergebnisse von jedem Lauf in der gleichen Datei. Werden Sie wind-up mit eine Menge doppelte info.Habe ich die sed-Kürzel, das weglassen der
-e
option. Sed verarbeiten kann eine ganze Gruppe von commands als ein argument, wie ich hier zeigen. Man könnte auch alle diese Befehle in einer separaten Datei, und dann nennen Sie es wieUND schließlich, wenn Ihr
sed
unterstützt die-i
option können Sie eine 'in-line' Ihre änderungen, und müssen nur- Und sed-überschreibt die alte Datei mit den änderungen. Ich würde empfehlen, gegen diese, bis Sie sicher sind, dass alle änderungen, die die dem Versuch der Arbeit und nicht dazu, irgendwelche unbeabsichtigten Konsequenzen. Sobald Ihre ursprüngliche Datei ist Weg, es gibt keinen Weg zurück, so sparen zu können .tmp wie Ihr tut, ist eine gute Sicherheits-Gürtel:-)
IHTH
export
, aber Sie müssen auf jeden Fall entwederOLDTEST="xyz"
oder etwas in deiner while-Schleife wieecho "$LINE" | while read OLDTEST var2 .... rest
; do .... ; done` . Es wäre viel einfacher für uns zu Antworten, wenn dein code war in der wichtigsten Frage. Betrachten Sie die Bearbeitung. Verwenden Sie die {} - edit-tool in der Nähe von oben Links Bearbeiten-Feld formatieren Sie den code. Viel Glück.