The UNIX and Linux Forums  
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.

Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
google unix.com



De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
Comment obtenir des lignes a débuté avec l'aide de cordes correspondaient sed ou grep pour la boucle? AMBER De programmation et de script Shell 8 07-13-2009 05:26 AM
Grep et de supprimer les lignes sauf les lignes avec des cordes vj8436 De programmation et de script Shell 14 04-17-2009 11:25 AM
Pour grep 10 lignes après une chaîne de caractères dans un fichier txt. suman82 De programmation et de script Shell 6 12-13-2008 01:08 AM
grep chaîne de caractères et quelques lignes après ashterix De programmation et de script Shell 7 12-07-2008 09:20 AM
grep string & n lignes suivante ashterix De programmation et de script Shell 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 Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 07-10-2009
Bhagirathi bhagirathi is offline
Registered User
  
 

Date d'inscription: juillet 2009
Messages: 10
grep une chaîne de caractères dans les lignes entre les 2 chaînes d'un fichier

Salut,
S'il vous plaît, aidez-moi avec le problème suivant:
J'ai un fichier xml avec les lignes suivantes
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>
Dans mon code il va d'abord vérifier les deux chaînes <cisco:name> et </ cisco: name> et après qu'il grep le comte de <cisco:cpt>. et ainsi de suite continuer jusqu'à la fin du fichier


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

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


}' temp 
rm temp
ce code ne donne pas l'op comme le
en première <cisco:name> et </ cisco: name> boucle, il doit donner 2, puis pour la prochaine il 1

plz help
  #2 (permalink)  
Old 07-10-2009
honglus honglus is offline
Registered User
  
 

Join Date: Dec 2008
Posts: 43
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
Registered User
  
 

Date d'inscription: juillet 2009
Messages: 10
Salut Honglus,
merci il fonctionne très bien. mais j'ai une requête
si j'ai à la recherche de deux ou 3 modèles comme <cisco:cpt>, <cisco:mdNm>, <cisco:sptp> alors comment puis-je procéder.
  #4 (permalink)  
Old 07-10-2009
honglus honglus is offline
Registered User
  
 

Join Date: Dec 2008
Posts: 43
Citation:
Posté par Bhagirathi View Post
Salut Honglus,
merci il fonctionne très bien. mais j'ai une requête
si j'ai à la recherche de deux ou 3 modèles comme <cisco:cpt>, <cisco:mdNm>, <cisco:sptp> alors comment puis-je procéder.
lien avec eux ou, quelque chose comme ceci:
$ 0 ~ / (un | deux | trois) /
  #5 (permalink)  
Old 07-10-2009
summer_cherry summer_cherry is offline Forum Advisor  
Registered User
  
 

Date d'inscription: juin 2007
Lieu: Beijing Chine
Posts: 1,079
plus officiellement, perl document XML peut traiter avec de nombreux modules disponibles.

Vous essayez de mai ci-dessous pour voir le résultat
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
Registered User
  
 

Date d'inscription: juillet 2009
Messages: 10
J'ai fait la même chose
Code:
awk '{ if (  $0 ~ /<cisco:cpt> | <cisco:sptp>/  )  {i++} if ( $0 ~ /<\/cisco:name>/ ) {print  "cpt=" i;i=0}}' test.xml
Mais le résultat ajouté. pourrait vous suggérer comment peut-il imprimer différemment
comme
cpt \u003d 1
sptp \u003d 2
  #7 (permalink)  
Old 07-10-2009
ghostdog74 ghostdog74 is offline Forum Advisor  
Registered User
  
 

Join Date: Sep 2006
Messages: 2513
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

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 01:43 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0