The UNIX and Linux Forums  

Go Back   Die UNIX-und Linux-Foren > Top Foren > Shell Programmierung und Scripting
.
Google unix.com



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

Reply
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 07-10-2009
bhagirathi bhagirathi is offline
Registrierte Nutzer
  
 

Join Date: Jul 2009
Beiträge: 10
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
  #2 (permalink)  
Old 07-10-2009
honglus honglus is offline
Registrierte Nutzer
  
 

Join Date: Dezember 2008
Beiträge: 48

Code:
awk '{ if (  $0 ~ /<cisco:cpt>/  )  {i++} if ( $0 ~ /<\/cisco:name>/ ) {print i;i=0}}' test.xml

  #3 (permalink)  
Old 07-10-2009
bhagirathi bhagirathi is offline
Registrierte Nutzer
  
 

Join Date: Jul 2009
Beiträge: 10
Hi Honglus,
Dank es funktioniert. aber ich habe eine Abfrage
wenn ich die Suche zwei oder 3 Muster wie <cisco:cpt>, <cisco:mdNm>, <cisco:sptp> dann, wie kann ich vorgehen.
  #4 (permalink)  
Old 07-10-2009
honglus honglus is offline
Registrierte Nutzer
  
 

Join Date: Dezember 2008
Beiträge: 48
Zitat:
Zitat von bhagirathi View Post
Hi Honglus,
Dank es funktioniert. aber ich habe eine Abfrage
wenn ich die Suche zwei oder 3 Muster wie <cisco:cpt>, <cisco:mdNm>, <cisco:sptp> dann, wie kann ich vorgehen.
Link mit OR, in etwa so aus:
$ 0 ~ / (eins | zwei | drei) /
  #5 (permalink)  
Old 07-10-2009
summer_cherry summer_cherry is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Jun 2007
Ort: Peking, China
Posts: 1098
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";
}

  #6 (permalink)  
Old 07-10-2009
bhagirathi bhagirathi is offline
Registrierte Nutzer
  
 

Join Date: Jul 2009
Beiträge: 10
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
  #7 (permalink)  
Old 07-10-2009
ghostdog74 ghostdog74 is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Sep 2006
Beiträge: 2557
gawk

Code:
awk 'BEGIN{ RS="</cisco:name>"}
{
  m=split($0,a,"\n")
  f=0
  for(i=1;i<=m;i++) {
    if(a[i] ~ /<cisco:cpt>/){
        f++    
    }
  }
  print f
}' file

Reply

Lesezeichen

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 06:23 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0