The UNIX and Linux Forums  


Go Back   De Unix-en Linux Forum > Top Forums > Programmeren en Shell Scripting
.
google unix.com



Programmeren en Shell Scripting Post vragen over KSH, CSH, SH, Bash, Perl, PHP, sed, awk en andere shell scripts en shell scripting talen hier.

Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
Draad Thread Starter Forum Antwoorden Last Post
How to get lijnen begon met geëvenaard snaren met behulp van sed of grep lus? ORANJE Programmeren en Shell Scripting 8 07-13-2009 06:26
Grep en verwijderen lijnen met uitzondering van de lijnen met strijkers vj8436 Programmeren en Shell Scripting 14 04-17-2009 12:25
Grep tot 10 regels na een string in een txt bestand. suman82 Programmeren en Shell Scripting 6 12-13-2008 01:08
grep string en een paar regels na ashterix Programmeren en Shell Scripting 7 12-07-2008 09:20
grep string & n volgende lijnen ashterix Programmeren en Shell 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 Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 07-10-2009
bhagirathi bhagirathi is offline
Geregistreerde gebruiker
  
 

Join Date: juli 2009
Posts: 10
grep een string in de lijnen tussen 2 snaren van een bestand

Hoi,
Please help me met het volgende probleem:
Ik heb een xml-bestand met de volgende regels

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 mijn code zal deze eerst controleren of de twee strings <cisco:name> en </ cisco: naam> en na dat het grep de graaf van <cisco:cpt>. en zo verder door tot het einde van bestand



Code:
#!/bin/sh
sed '/<\/cisco:name>/{G;}' test.xml >temp 

nawk 'BEGIN{RS=""} 
{ 
grep -c '<cisco:cpt>' print 


}' temp 
rm temp

deze code is niet dat de op de als
in eerste <cisco:name> en </ cisco: naam> lus moet geven voor de volgende 2 dan zou 1

plz help
  #2 (permalink)  
Old 07-10-2009
honglus honglus is offline
Geregistreerde gebruiker
  
 

Join Date: december 2008
Posts: 44

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
Geregistreerde gebruiker
  
 

Join Date: juli 2009
Posts: 10
Hi Honglus,
dankzij het werkt prima. maar ik heb een vraag
als ik naar twee of 3 patronen zoals <cisco:cpt>, <cisco:mdNm>, <cisco:sptp> vervolgens hoe kan ik gaan.
  #4 (permalink)  
Old 07-10-2009
honglus honglus is offline
Geregistreerde gebruiker
  
 

Join Date: december 2008
Posts: 44
Citaat:
Oorspronkelijk geplaatst door bhagirathi View Post
Hi Honglus,
dankzij het werkt prima. maar ik heb een vraag
als ik naar twee of 3 patronen zoals <cisco:cpt>, <cisco:mdNm>, <cisco:sptp> vervolgens hoe kan ik gaan.
koppeling met OR, zoiets als dit:
$ 0 ~ / (een | twee | drie) /
  #5 (permalink)  
Old 07-10-2009
summer_cherry summer_cherry is offline Forum Advisor  
Geregistreerde gebruiker
  
 

Join Date: Jun 2007
Locatie: Beijing China
Berichten: 1.089
meer formeel perl kan XML-document met vele beschikbare module.

U kunt hieronder om het resultaat te bekijken

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
Geregistreerde gebruiker
  
 

Join Date: juli 2009
Posts: 10
Ik heb dezelfde

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

Maar het resultaat toegevoegd. zo kon je raden hoe kan het anders dat print
zoals
cpt \u003d 1
sptp \u003d 2
  #7 (permalink)  
Old 07-10-2009
ghostdog74 ghostdog74 is offline Forum Advisor  
Geregistreerde gebruiker
  
 

Join Date: Sep 2006
Berichten: 2.554
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

Bladwijzers

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 08:10 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De Unix-en Linux Forums Copyright © 1993-2009. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0