PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ausgabe formatieren mit sed/grep??



SilverICE
12.01.2004, 11:28
hallo

ich habe ein formatierungs problem

ich lese von einem windowsserver die ip´s aus.. über ssh und wmic...

ich habe 2 befehle um die information zu bekommen die ausgabe sieht wie folgt aus

mit zeilenangabe:

1. {"164.*.*.57"}
2.
3.
4.
5.
6.

mit dem anderen befehl sieht es wie folgt aus

IPAddress={"164.*.*.57"}

bei mehreren ip´s

IPAddress={"164.*.*.57","164.*.*.56"}

meine ausgabe soll aber wie folgt aussehen

<NET_IP>
<NET_IP> 164.*.*.57 </NET_IP>
</NET_IP>

bei mehreren ip´s

<NET_IP>
<NET_IP> 164.*.*.57 </NET_IP>
<NET_IP> 164.*.*.56 </NET_IP>
</NET_IP>

kann mir wer helfen? ich weiß nicht weiter.. mit dem grep befehl bin ich gescheitert, ich denke ja mit sed geht es irgendwie... nur wie??

danke schon mal
cu silver

DaTa
12.01.2004, 19:24
Probiers mal mit awk:


danielt:~/test> cat ips
{"164.*.*.57"}
{"164.*.*.56"}
danielt:~/test> cat ips.awk
#!/usr/bin/awk

BEGIN {
print "<NET_IP>"
}
END {
print "</NET_IP>"
}

{
gsub("\{\"", "");
gsub("\"\}", "");
print "<NET_IP> " $0 " </NET_IP>";
}
danielt:~/test> awk -f ips.awk < ips
<NET_IP>
<NET_IP> 164.*.*.57 </NET_IP>
<NET_IP> 164.*.*.56 </NET_IP>
</NET_IP>

SilverICE
13.01.2004, 07:52
hi danke für die antwort


ich werde es gleich mal austesten..

was mir aufgefallen ist, die ausgabe wenn mehreren ip´s vorhanden sind ist immer gleich

IPAddress={"164.*.*.57","164.*.*.56"}

alle ip´s stehen neben einander, werden allerdings von einem , getrennt :)

SilverICE
15.01.2004, 07:48
hi meine ausgabe ist jetzt

164.*.*.56 164.*.*.57

wie bekomme ich das jetzt unter beachtung das es auch mehr ip´s sein können untereinander geschrieben?

cu silver

mjup
15.01.2004, 08:42
Wieso nimmst du nicht den 1. Befehl, der 1. 10.*.*.* ausgibt? die ausgabe leitest du in ein file um. z.B.: Befehl > ipfile

Dann schreibst du dieses script:

#!/bin/bash
# IPscript
echo "<NET_IP>"
awk '{print "<NET_IP> " $2 " </NET_IP>"}' ipfile
echo "<NET_IP>"

#!/bin/bash
# IPscript
echo "<NET_IP>"
DeinBefehl | awk '{print "<NET_IP> " $2 " </NET_IP>"}'
echo "<NET_IP>"




Is doch ganz kurz und funkt wunderbar.

Noch einfacher gehts natürlich so:

SilverICE
15.01.2004, 12:03
wie gesagt unter beachtung das auch mehrere ip´s vorhanden sein können... dann hilft mir $2 nicht mehr... und schleifen will ich auch vermeiden..

aber ich habe es hinbekommen mit xargs -n 1 und dann noch nen awk zu formatierung hinten dran..

danke an alle

cu

mjup
15.01.2004, 14:00
Bitte!

Aber so wie du es aufgeschrieben hast, dibt der 1. befehl die IP's untereinander aus. also sehe ich da kein problem? Aber egal.

SilverICE
16.01.2004, 06:38
stimmt war mein fehler .. falsche aussage sry

mjup
16.01.2004, 07:41
In meinem is trotzdem ein fehler, weil ich hab die klammern und anführungszeichen nich verschwinden lassen.

Aber hauptsache du hast jetz ne Lösung!