The UNIX and Linux Forums  
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.

Go Back   UNIX e Linux Forum > Inizio Forum > Shell scripting e di programmazione
.
google unix.com



Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
Come ottenere linee cominciato con stringhe corrispondenti usando grep o sed per loop? AMBRA Shell scripting e di programmazione 8 07-13-2009 05:26 AM
Grep ed eliminare le linee, ad eccezione delle linee con le stringhe vj8436 Shell scripting e di programmazione 14 04-17-2009 11:25 AM
Per grep 10 righe dopo una stringa in un file txt. suman82 Shell scripting e di programmazione 6 12-13-2008 01:08 AM
grep stringa e poche righe dopo ashterix Shell scripting e di programmazione 7 12-07-2008 09:20 AM
grep stringa e successiva n linee ashterix Shell scripting e di programmazione 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 Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 07-10-2009
bhagirathi bhagirathi is offline
Utente Registrato
  
 

Iscriviti Data: luglio 2009
Interventi: 10
grep una stringa in stringhe tra 2 linee di un file

Salve,
Please help me con il seguente problema:
Ho un file XML con le seguenti linee
Codice:
<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>
Nel mio codice è in primo luogo verificare che le due stringhe <cisco:name> e </ cisco: nome> e dopo che sarà grep il conte di <cisco:cpt>. e così via continuerà fino alla fine del file


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

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


}' temp 
rm temp
questo codice non è che la l'opzione come
in prima <cisco:name> e </ cisco: nome> loop si deve dare per il prossimo 2 allora sarebbe 1

plz help
  #2 (permalink)  
Old 07-10-2009
honglus honglus is offline
Utente Registrato
  
 

Iscriviti Data: dicembre 2008
Interventi: 43
Codice:
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
Utente Registrato
  
 

Iscriviti Data: luglio 2009
Interventi: 10
Hi Honglus,
grazie funziona benissimo. ma ho una query
se i due sono alla ricerca o 3 modelli come <cisco:cpt>, <cisco:mdNm>, quindi <cisco:sptp> Come posso procedere.
  #4 (permalink)  
Old 07-10-2009
honglus honglus is offline
Utente Registrato
  
 

Iscriviti Data: dicembre 2008
Interventi: 43
Citazione:
Originalmente inviato da bhagirathi View Post
Hi Honglus,
grazie funziona benissimo. ma ho una query
se i due sono alla ricerca o 3 modelli come <cisco:cpt>, <cisco:mdNm>, quindi <cisco:sptp> Come posso procedere.
collegamento con O, qualcosa di simile a questo:
$ 0 ~ / (uno | due | tre) /
  #5 (permalink)  
Old 07-10-2009
summer_cherry summer_cherry is offline Forum Advisor  
Utente Registrato
  
 

Iscriviti Data: giugno 2007
Ubicazione: Pechino Cina
Messaggi: 1.082
più formale, perl in grado di gestire documenti XML con molti moduli disponibili.

Puoi provare qui sotto per vedere il risultato
Codice:
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
Utente Registrato
  
 

Iscriviti Data: luglio 2009
Interventi: 10
Ho fatto la stessa cosa
Codice:
awk '{ if (  $0 ~ /<cisco:cpt> | <cisco:sptp>/  )  {i++} if ( $0 ~ /<\/cisco:name>/ ) {print  "cpt=" i;i=0}}' test.xml
Ma il risultato aggiunto. così si potrebbe suggerire in che modo si possono stampare che diversamente
piacere
cpt \u003d 1
sptp \u003d 2
  #7 (permalink)  
Old 07-10-2009
ghostdog74 ghostdog74 is offline Forum Advisor  
Utente Registrato
  
 

Join Date: Sep 2006
Interventi: 2.521
gawk
Codice:
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

Segnalibri

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 06:41 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0