2009-06-30 9 views
6

ich eine Textzeile wieEscaping the ‚‘ Zeichen in der Ersatzzeichenfolge in einem sed Ausdruck

13) Check for orphaned Path entries 

zu nehmen versuchen und ändern Sie sich auf (ich die Bash-Farbcodes will die Ausgabe einfärben, nicht auf dem Bildschirm angezeigt)

mit Bash Farbcodes, um das Sternchen zu färben, damit es mehr herausstechen. Ich habe einen sed-Befehl, der das meiste davon erledigt, außer dass er die Farbcodes nicht korrekt behandelt, da er sie als Referenzen auf Ersatztext ansieht.

Was ich habe, so weit:

sed "s/ *13) \(.*\)/ \033[32m*\033[0m \1/" 

, die die folgende Ausgabe erzeugt, wenn an der Schnur betreibe ich am Anfang gab:

13) Check for orphaned Path entries33[32m* 13) Check for orphaned Path entries33[0m Check for orphaned Path entries 

Es ist die \ 0 des \ unter 033 und ersetze ihn durch die ursprüngliche Zeichenkette. Eine Verdoppelung der umgekehrten Schrägstriche in der Ersatzzeichenfolge macht keinen Unterschied. Ich bekomme immer noch den gleichen Ausgabetext.

Wie füge ich Bash Color Escapes in einen sed Ersatzausdruck ein?

+0

die Schrägstriche Vervierfachung die gleiche Wirkung wie mit einfachen Anführungszeichen verursacht und bashslashes verdoppelt, wie @DreadPirateShawn vorgeschlagen. Ich bekomme \ 033 [32m * \ 033 [0m direkt an die Konsole ausgegeben, ohne in Farbcodes umgewandelt zu werden. –

+0

Es ist im Grunde das Gleiche. Deshalb habe ich bereits meinen Kommentar gelöscht. – balpha

Antwort

9

Wahrscheinlichkeiten sind, dass die sed, die Sie verwenden, Oktal nicht versteht, aber es kann Hex verstehen.Versuchen Sie, diese Version zu sehen, ob es für Sie arbeitet (mit \x1b statt \033):

sed "s/ *13) \(.*\)/ \x1b[32m*\x1b[0m \1/" 
+2

Wenn es oktal ist, verwenden Sie \ o033 – Hasturkun

+0

@Hasturkun: Aus diesem Grund lohnt es sich, die Info-Datei zu lesen. Manchmal schneidet der Mensch es einfach nicht. Danke für die Information. –

+0

@Dennis: Meinst du das manchmal Mann nicht das gleiche Handbuch wie info? –

2

Verdoppeln Sie die Schrägstriche in der Ersatzzeichenfolge und Einzel anstelle von doppelten Anführungszeichen um den sed Ausdruck:

sed 's/ *13) \(.*\)/ \\033[32m*\\033[0m \1/' 

Dies verhindert, dass die Schale mit dem sed Verhalten stört.

~~~~~~~

Update:

ein Skript verwenden Farbe sauber zu erreichen:

colorize.sh

#!/bin/sh 

HIGHLIGHT=`echo -e '\033[32m'` 
NORMAL=`echo -e '\033[0m'` 

sed "s/ *13) \(.*\)/ $HIGHLIGHT*$NORMAL \1/" yourinputtext 
+0

Während sed nicht versucht, das \ 0 jetzt zu ersetzen, bekomme ich immer noch keine farbige Ausgabe. –

+0

Um genauer zu sein, bekomme ich \ 033 [32m * \ 033 [0m direkt an die Konsole ausgegeben, ohne in Farbcodes umgewandelt zu werden –

+0

Nicht ganz sicher, was du meinst ... Mein Ziel war es, das Problem der Flucht zu lösen ' \ 'Zeichen in der Ersetzungszeichenfolge, und tat dies - ich bekomme den gleichen Ausgangstext, den Sie oben in Ihrer "Ändern Sie es" -Zeichen angeben. Darüber hinaus weißt du, was du farblich mehr suchst als ich; Ich wollte nur sicherstellen, dass Sie die Werkzeuge dafür zur Verfügung haben. :-) – DreadPirateShawn

-1

Versuchen Sie folgendes:

sed "s/ *13) \(.*\)/ \\\\033 \1/" 

dh slash-sla sh-slash-slash-033

8

Ihre ‚\ 033‘ ist in der Tat eine einzige ESC (Escape) Zeichen, die Ausgabe dieses Sie irgendein verwenden kann folgendes:

  • \o033
  • \d027
  • \x1B
  • \c[ für CTRL-[
+0

+1 für die oktale Vorwahl - die meisten Programme erkennen nur die führende Null. –

2

hatte ich das gleiche Problem und ich auf diese Weise gelöst.

können Sie versuchen, Ihren Code zu ändern:

sed "s/ *13) \(.*\)/ \033[32m*\033[0m \1/" 

in dieser:

sed "s/ *13) \(.*\)/ $(echo '\033[32m')*$(echo '\033[0m') \1/" 

Die Grundidee ist 'echo' zu verwenden, um den Escape-Befehl zu drucken. Es funktionierte für mich,

0

Ich benutze gaffen

gawk -v string1=$STRING1 -v IGNORECASE=1 ' { gsub (string1 , "\033[1m&\033[0m") ; print } '