PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie <Zahl>: am Zeilenanfang löschen?



Linus
21-04-2009, 23:22
Ein

DATE=$(date +%s)
LOGFILE=$DATE.log
hwinfo --all -dump-db 1 > $LOGFILE
sed -i '/IRQ:/d' $LOGFILE

liefert mir zwar schöne Logfiles mit denen ich Änderungen der Hardware durch ein diff der Logfiles gut erkennen kann, aber bei jedem Eintrag ist am Zeilenanfang ein

<Zahl>:

und damit bekomme ich mit einer zusätzlichen Komponente auch alle nachfolgenden von diff gemeldet, nur weil sich deren Nr. erhöht hat.
Deshalb soll die Zahl mit dem Doppelpunkt am Zeilenanfang aus $LOGFILE gelöscht werden.
Wie bekommt man das hin? :confused:

jan61
22-04-2009, 01:06
Moin,

nutze Regex ;-)

Um jede Zahl bis zum Doppelpunkt zu löschen, kannst Du sowas benutzen:

jan@jack:~/tmp> echo "123: blablubb" | sed 's/[0-9]*: *//'
blablubb
Das kannst Du problemlos in Deinen existierenden sed einbauen - einfach das neue Kommando mit Semikolon anhängen.

Jan

Linus
22-04-2009, 19:13
Ok, funktioniert, danke :)

Linus
30-01-2010, 18:18
Also das funktioniert noch nicht ganz, denn es werden immer ALLE Doppelpunkte gelöscht!
Wie kann man das verhindern? :confused:
Versucht habe ich schon ein Quoten vom Doppelpunkt mittels Backslash, aber ohne Erfolg.

msi
30-01-2010, 19:48
ich empfehle sowas hier:

echo "123: test" | perl -npe 's/^\d+:\s*//'


das problem ist, dass jan nicht überprüft ob die zahl wirklich am zeilenanfang steht, deswegen muss noch das ^ rein.
zahlen kann man in reg. ausdrücken mit \d matchen man muss nicht [0-9] angeben. außerdem empfielt sich
für white space zeichen ein \s. wenn du white space zeichen erhalten möchtest mach einfach das \s* raus.
perl ist die modernere variante von sed und ist auch super unter anderen system zu nutzen (zB windows etc),
deswegen empfehle ich perl anstatt sed zu verwenden.

Linus
31-01-2010, 00:50
Aha, danke :)

Probiert hatte ich auch schon Varianten wie

echo "123: test" | sed 's/\d{6-1}: *//'

aber von denen funktionierte keine.