![]() |
|
|
Google unix.com
|
|||||||
| Foren | Registrieren | Forum-Regeln | Links | Alben | FAQ | Benutzerliste | Kalender | Suche | Die heutige Beiträge | Alle Foren als gelesen markieren |
| Shell Programmierung und Scripting Post Fragen zu ksh, csh, sh, bash, Perl, PHP, sed, awk und anderen Shell-Skripte und Shell-Scripting-Sprachen hier. |
Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
|
||||
| Faden | Thread Starter | Forum | Antworten | Last Post |
| Wie kommt man mit Linien mit Strings mit sed oder grep for-Schleife? | AMBER | Shell Programmierung und Scripting | 8 | 07-13-2009 06:26 AM |
| Grep und löschen Linien mit Ausnahme der Linien mit Zeichenketten | vj8436 | Shell Programmierung und Scripting | 14 | 04-17-2009 12:25 PM |
| Um grep 10 Zeilen nach einer Zeichenkette in einer txt-Datei. | suman82 | Shell Programmierung und Scripting | 6 | 12-13-2008 01:08 AM |
| grep string & ein paar Zeilen nach | ashterix | Shell Programmierung und Scripting | 7 | 12-07-2008 09:20 AM |
| grep string & nächsten n Zeilen | ashterix | Shell Programmierung und Scripting | 8 | 11-21-2005 11:38 PM |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread | Rate Thread | Anzeige-Modi |
|
|
|
||||
|
grep einen String in den Leitungen zwischen 2 Saiten einer Datei
Hi, Bitte helfen Sie mir mit den folgenden Problem: Ich habe eine XML-Datei mit den folgenden Zeilen Code:
<cisco:name>
<cisco:mdNm>Cisco Device 7500 A Series</cisco:mdNm>
<cisco:meNm>10.1.100.19</cisco:meNm>
<cisco:ehNm>/shelf=1</cisco:ehNm>
<cisco:subname>
<cisco:sptp>Cisco PortA Series</cisco:sptp>
<cisco:aliasNameList xsi:nil="true"/>
<cisco:owner xsi:nil="true"/>
<cisco:subportname>
<cisco:cpt>Cisco SubPort B Series</cisco:cpt>
<cisco:aliasNamesubList xsi:nil="true"/>
<cisco:userLabel xsi:nil="true"/>
</cisco:subportname>
</cisco:subname>
<cisco:subname>
<cisco:sptp>Cisco PortAB Series</cisco:sptp>
<cisco:aliasNameList xsi:nil="true"/>
<cisco:owner xsi:nil="true"/>
<cisco:subportname>
<cisco:cpt>Cisco SubPort AB Series</cisco:cpt>
<cisco:aliasNamesubList xsi:nil="true"/>
<cisco:userLabel xsi:nil="true"/>
</cisco:subportname>
</cisco:subname>
</cisco:name>
<cisco:name>
<cisco:mdNm>Cisco Device 7500B Series</cisco:mdNm>
<cisco:meNm>10.1.100.20</cisco:meNm>
<cisco:ehNm>/shelf=2</cisco:ehNm>
<cisco:subname>
<cisco:sptp>Cisco Port B Series</cisco:sptp>
<cisco:aliasNameList xsi:nil="true"/>
<cisco:owner xsi:nil="true"/>
<cisco:subportname>
<cisco:cpt>Cisco SubPort B Series</cisco:cpt>
<cisco:aliasNamesubList xsi:nil="true"/>
<cisco:userLabel xsi:nil="true"/>
</cisco:subportname>
</cisco:subname>
</cisco:name>
In meinen Code, wird erst überprüft, die beiden Streicher <cisco:name> und </ Cisco: Name> und nach, dass es grep die Anzahl der <cisco:cpt>. und so weiter bis Ende der Datei Code:
#!/bin/sh
sed '/<\/cisco:name>/{G;}' test.xml >temp
nawk 'BEGIN{RS=""}
{
grep -c '<cisco:cpt>' print
}' temp
rm temp
Dieser Code ist nicht die OP als in erster <cisco:name> und </ Cisco: Name> Schleife sollte es geben für die nächsten 2, wäre es 1 plz help |
|
||||
|
Zitat:
$ 0 ~ / (eins | zwei | drei) / |
|
||||
|
mehr offiziell, perl können XML-Dokument mit vielen Modul verfügbar. Sie können versuchen, um das Ergebnis Code:
use XML::Parser;
my $file = 'a.xml';
my ($flag,$index,@arr,%hash)=(0,-1);
sub start_handler
{
my $expat = shift;
my $element = shift;
if($element eq 'cisco:name'){
$index++;
}
else{
if($element eq 'cisco:cpt'){
$flag=1
}
else{
$flag=0;
}
}
}
sub char_handler
{
my ($p, $data) = @_;
if( ($flag eq '1') and !($data =~ /^\s*$/)){
$arr[$index]++;
$hash{$index}.=" ".$data;
}
}
my $parser = new XML::Parser(ErrorContext => 2);
$parser->setHandlers(Start => \&start_handler,
Char => \&char_handler);
$parser->parsefile($file);
for(my $i=0;$i<=$#arr;$i++){
print $arr[$i],"\n";
print $hash{$i},"\n";
print "--------\n";
}
|
|
||||
|
Ich habe die gleichen Code:
awk '{ if ( $0 ~ /<cisco:cpt> | <cisco:sptp>/ ) {i++} if ( $0 ~ /<\/cisco:name>/ ) {print "cpt=" i;i=0}}' test.xml
Aber das Ergebnis hinzugefügt. ja, machen Sie Vorschläge, wie kann es gedruckt wird, dass anders wie cpt \u003d 1 sptp \u003d 2 |
![]() |
| Lesezeichen |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|