PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Textbearbeitung mit grep,sed u. cut brauch Hilfe



Hoomer
06.08.03, 11:52
Hallo zusammen,

Ich habe hier folgendes schon realisiert:

meine Linuxkiste meldet sich nachts per cron an insg. 15 OS2 Servern an, kopiert die messages.log eines Bandsicherungsprogramms unter tagesdatum_servername.log in ein verz. und benennt die auf dem os2 server in tagesdatum.log um.

alle logs werden mit grep durchsucht und Ergebnisse ausgegeben.
Z.B.

grep id=7002 $(date -I)_*.log >> /sambaverz/Zusammenfassung/$(date -I)_fail.txt
grep id=6500 $(date -I)_*.log >> /sambaverz/Zusammenfassung/$(date -I)_kein_Band.txt

Hier ist das erste Problem: Da ich mit ..._*.log alle Logdateien auf einmal durchsuche, muss ich das mehrmals machen ( hier ist id 7002, 7003, 8540 und 8514 ) für (!)einen Ausgabetext und noch eine andere Textstellen wie z.B. "normaly" interessant, mit [7,8] usw kann ich nicht arbeiten.
?Wie kann ich grep mehrere textstellen mitgeben?

Alles wird mit sort in eine temporäre Datei geschrieben.

hier muss ich dann an das jeweilige Zeilenende ein <br> einfügen. Gelöst mit:

cat /sambaverz/temptxt | sed 's/normally./normally. <br>/g' >> temp3txt

setzt aber vorraus, das der Text immer gleich ist, dem ist aber leider nicht so......

?Wie kann ich einen Text an ein Zeilenendende anfügen?

Dann werden diese Texte in eine Datum.HTML mit entsprechenden Rechten in den Apache kopiert . Hier muss natürlich noch ein Index.html täglich mit einem Link auf die neue Datei versehen werden. Dazu schneide ich body und html ab, schreibe meine neue Zeile rein und füge body und html wieder an. Gelöst mit:

cat index.html | sed 's/<\/html>/ /g' | sed 's/<\/body>/ /g' >> frisch
echo "$V_TEXT $V_LINK" >> frisch
cat /sambaverz/logs/html/fuss >> frisch
mv index.html index.$(date -I) 2>$V_FP
mv frisch $V_PFAD/index.html 2>$V_FP

Das Problem ist, dass ich noch mehr variablen Text in die Fusszeile schreiben möchte.
?Ich brauche eine Art Cut auf zeilenebene cut - die letzten 10 Zeilen , oder so...?

Kann jemand helfen??

green
06.08.03, 12:36
Also die letzten paar Zeilen kann man mit tail -n anzeigen.
Mit echo -e kannst Du z.B. ein Backspace machen und dann mit >> text einfügen. Weis nicht ob das so klappt. (Verweis auf die Manpage)
Grep über Pipes mehrmals übereinanderlegen um mehrere Textst. ...

Hoomer
06.08.03, 12:57
Hmmmm

tail löst mein Problem nicht, da *angezeigt* wird und ca. 100 mal echo -e geht auch nicht , da *variabler* Text am Ende der datum.html. Es ist maximal die Anzahl der Zeilen bekannt.

Das Problem ist ja, dass ich ja erst </body></html> entfernen muss, bevor ich Zeilen anfügen kann.

Man kann noch einen draufsetzen, in dem ich immer 2 Zeilen nebeneinander setzen und dann erst eine neue Zeile beginnen möchte. in etwa (Pseudocode):

html+boby abschneiden
if
länge tail -1 = 20 Buchstaben
dann Zeile anfügen
else neue zeile
fi

oder so........

##
grep über pipes: theoretisch geht doch nur das Ergebnis in die nächste pipe, oder?
dann kan ich nicht erst nach 7402 und dann nach 7500 fragen, oder?
##


Bin auf Tipps gespannt

Hoomer

green
06.08.03, 13:51
Erwischt. Ich gebe zu, dass ich nicht alles gelesen hab.
Das Problem mit "</body></html>" könntest Du lösen indem du mit head die maximale Anzahl der Zeilen -2 (oder so) anzeigtst. Du sagtest die maximale Anzahl ist bekannt. Kannst aber auch mit wc zählen lassen. Dann könntest Du sagen:
a=`wc -l text.bla`;((a=$a-2))
Dann head -n $a > neu.bla
Dann neue Zeilen anfügen....

Und Dein Pseudocode müsste in etwa so ausschauen.
if test `tail -n1|wc -c`==20;then blabla;else blabla;fi


wg. grep: da hast Du recht...

ich hoffe ich konnte Dir ein bischen weiterhelfen:rolleyes:

Jasper
06.08.03, 14:03
Original geschrieben von Hoomer

Hier ist das erste Problem: Da ich mit ..._*.log alle Logdateien auf einmal durchsuche, muss ich das mehrmals machen ( hier ist id 7002, 7003, 8540 und 8514 ) für (!)einen Ausgabetext und noch eine andere Textstellen wie z.B. "normaly" interessant, mit [7,8] usw kann ich nicht arbeiten.
?Wie kann ich grep mehrere textstellen mitgeben?


z.b.:

grep 'pattern\|pattern2\|...\|patternn' file

pattern1, pattern2, ..., patternn werden ODER verknüpft

[QUOTE]
?Wie kann ich einen Text an ein Zeilenendende anfügen?


z.b.:

sed 's/$/<br>/g' file



mehrfachverkettung von sed ist nicht effizient, besser ist:

sed -e 's/<\/html>/ /g' -e 's/<\/body>/ /g' index.html >> frisch

nebenbei kann das cat entfallen.

-j

Hoomer
07.08.03, 10:12
Ich mag dieses Forum!! :)

Vielen Dank, die Antworten haben sehr weitergeholfen bzw. neue Möglichkeiten geschaffen.

Hoomer

buffer_7
07.08.03, 14:25
Mahlzeit,

wechen des greps, da jibts doch ne Option (ich glaube -f) wo man'n Filel übergeben kann.
In dem File steht auf jeder Zeile ein Suchkriterium.
Ich hoffe jetzt nix durcheinander zu bringen, aber das müßte doch funzen und ist leichter, da du beim ändern deiner Suchkriterien nur das File editierst und nicht den Code.

Grüßchen

buffer_7