2016-06-04 13 views
0

Ich habe ein Skript erstellt, das HTML-Code generiert. Am Ende des Skripts muss ich einige Wörter in einer Tabelle hervorheben, indem ich sie fett mache.sed in AIX-Skript funktioniert nicht mit speziellen Zeichen

Also muss ich in den Code ersetzen, jede Instanz WORD von WORD oder WORD

ist natürlich WORD in einer Variablen $ CODE gespeichert dies viel schwieriger zu machen.

Ich versuchte, den Befehl sed unglücklicherweise ohne Erfolg zu verwenden.

sed -e 's/$CODE/<b>$CODE</b>/g' page.html > newpage.html 

Ich habe versucht auch mit doppelten Anführungszeichen, mit Escape-Zeichen vor dem /, viele Kombination und doppelte Anführungszeichen, mit | als Trennzeichen, immer ohne Erfolg. Wenn einer von euch mich auf eine Lösung hinweisen könnte, wäre ich wirklich großartig.

PS: Tryed auch mit awk ... aber mit variabler ist es ein echten Schmerzen in dem ...

EDIT: Hier ist mein genauer Code ist es, alle Sie zu helfen. code_list.txt enthält eine Liste von CODE-Textzeilen.

for y in code_list.txt 
do 
     CODE=$(echo $y | cut -f1 -d-) 
     awk -v code="$CODE" '{if(match($0,code)){gsub(code,"<b>"code"</b>")}} 1' $SCRIPTS/html/daily_running_jobs.html > $SCRIPTS/html/daily_running_jobs_highlight.html 
     mv $SCRIPTS/html/daily_running_jobs_highlight.html $SCRIPTS/html/daily_running_jobs.html 
done 

+0

kleine Präzision, wenn ich den Befehl echo, Variablen sind gut übersetzt. Aber der Befehl wurde nicht ausgeführt. –

+2

[bearbeiten] Ihre Frage, um prägnante, testbare Beispieleingabe und erwartete Ausgabe einzuschließen.Schließen Sie solche Anwendungsfälle ein, die Ihrer Meinung nach schwer zu handhaben sind, und wenn Ihre "WORD" s beliebige nicht alphabetische Zeichen enthalten können, beschreiben Sie + diese Fälle auch. Sie können auch Fälle wie "das" und "There" angeben, um zu sehen, wie partielles und case-sensitives Matching gehandhabt wird. Schließlich - verwenden Sie nicht Großbuchstaben für nicht exportierte Variablennamen, um Konflikte mit eingebauten und anderen exportierten Variablennamen zu vermeiden. –

Antwort

2

Es gibt keinen Grund, Ihre Idee würde nicht funktionieren, wenn

  • Sie "statt"

  • verwenden gibt es keine @ (EDIT: und keine Zeilenumbrüche) in der $ CODE Ausdruck (ersetzen / von @)

sed -e "[email protected][email protected]<b>$CODE</b>@g" page.html > newpage.html

Das Problem mit Ihrer Lösung war das Zitat, und das sed regex separator / wurde auch in Ihnen verwendet r Ersatz Ausdruck wie in </b>

EDIT - mehrere Werte aus der Datei ersetzt werden

Wenn Sie eine Datei code_list.txt haben, wo alle Saiten-to-be-ersetzt sind in einer Eins-pro-line , tun

cp page.html newpage.html 
while read var 
do 
    mv newpage.html newpage1.html 
    sed -e "[email protected][email protected]<b>$var</b>@g" newpage1.html > newpage.html 
    # optionally rm newpage1.html 
done < code_list.txt 
+0

Ich werde es noch einmal versuchen, aber ich denke, ich habe dies bereits mit | versucht Anstatt von @. Ich werde dir morgen mehr erzählen. –

+0

Sorry Stefan, aber es funktioniert nicht. Ich habe diese Fehlermeldung. Variabler CODE wurde durch NTCA ersetzt: sed: Funktion s @ NTCA kann nicht geparst werden. –

+0

Von deinem Kommentar zu Chets Antwort Ich nehme an, dass deine Variable CODE nicht "NTCA", sondern "NTCA EBXL FSRV" und möglicherweise sogar ein NEWLINE-Zeichen irgendwo enthält - kannst du bitte überprüfen, ob dies beabsichtigt ist oder ob der Code es soll Arbeitet nur "NTBA" mit nichts nach ist der Wert von $ CODE - bitte melden Sie die Ausgabe von 'echo" >> $ CODE << "'. Für den Fall, dass Sie eine Zeichenfolge durch eine neue Zeile ersetzen müssen wir möglicherweise über etwas völlig anderes denken .... –

0
awk -vcode="$CODE" '{if(match($0,code)){gsub(code,"<b>"code"</b>")}} 1' page.html > newpage.html 

annehmen, dass es eine Variable $ CODE

Wir geben es an awk-Variable, wenn es eine Übereinstimmung dann

ist ersetzen
+0

Danke Chet. Ich werde das am Montag @work versuchen. –

+1

awk ist nicht C: ''match ($ 0, code) {gsub (code," "code" ")} 1'' aber das wird bei verschiedenen Werten von' code' fehlschlagen, genau wie ein äquivalentes sed Skript , so IDK, wenn es die richtige Antwort ist. Wenn Sie kein Leerzeichen zwischen '-v' und' code' setzen, machen Sie das Skript unnötigerweise gawk-spezifisch, setzen Sie einfach ein Leerzeichen in den Portable: '-v code = ...' –

+0

Hallo, ich habe gerade versucht awk Option, aber es funktioniert nicht besser: #highlight die wichtigen Anwendungscodes für y in $ (cat $ SCRIPTS/$ APP) do CODE = $ (echo $ y | Schnitt -f1 -d-) awk -v code = "$ CODE" '{if (Übereinstimmung ($ 0, code)) {gsub (code, "" code "")}} 1 $ SCRIPTS/html/daily_running_jobs.html> $ SCRIPTS/html/daily_running_jobs_highlight. html getan –