Ich habe die folgende Beispieldatei:Separate eine Textdatei mit sed
evtlog.161202.002609.debugevtlog.161201.162408.debugevtlog.161202.011046.debugevtlog.161202.002809.debugevtlog.161201.160035.debugevtlog.161201.155140.debugevtlog.161201.232156.debugevtlog.161201.145017.debugevtlog.161201.154816.debug
Ich möchte die Zeichenfolge trennen und eine neue Zeile nach dem Matching „debug“ wie folgt hinzufügen:
evtlog.161202.002609.debug
evtlog.161201.162408.debug
Bisher Ich habe fast alles mit sed versucht, aber es scheint nicht zu tun, was ich will.
sed 's/debug/{G}' latest_evtlogs.out
sed '/debug/i "SAD"' latest_evtlogs.out
etc ... sed 's/debug/\n/g' latest_evtlogs.out
funktioniert nicht, wenn ich es als Rohr im Skript hinzufügen, aber es funktioniert, wenn ich es manuell ausführen.
Hier ist, wie ich die Datei erzeugen:
printf $(ls -l $EVTLOG_PATH/evtlog|tail -n 10|awk '{printf $8 , "%s\n\n"}'|sed 's/debug/\n/g') >> latest_evtlogs.out
Zunächst wollte ich nur Newline hinzufügen mit awk, aber es funktioniert auch nicht. Irgendwelche Ideen, warum ich die Schnur nicht mit einer Newline trennen kann?
Ich verwende:
Distributor ID: Debian
Description: Debian GNU/Linux 5.0.10 (lenny)
Release: 5.0.10
Codename: lenny
Sind Sie sicher, dass Sie nicht viel Verarbeitung machen, die Sie nicht brauchen? Sie verwenden 'ls -l', um eine vollständige Liste des Verzeichnisses zu erhalten, und verwenden dann Awk, um nur den Dateinamen zu extrahieren und ohne einen Zeilenumbruch zu drucken, und dann versuchen, die Zeilenumbrüche hinzuzufügen. Warum nicht das einfachere "Skript" 'ls $ EVTLOG_PATH/evtlog | tail -n 10 >> latest_evtlogs.out' mach was du willst? –
@ K.A Buhr, ich habe es probiert und es kommt wieder eine einzelne Saite an. –
Der Befehl 'awk', der zum Generieren der Ausgabedatei verwendet wurde, ist falsch. Die Formatzeichenfolge sollte der erste Parameter sein: 'awk '{printf"% s \ n \ n ", $ 8}''. Fragen. A. Buhr schlug vor, es wäre besser, "ls" anstelle von "ls -l" zu verwenden, weil dann "awk" nicht gebraucht würde. – pjh