The UNIX and Linux Forums  


Go Back   El UNIX y Linux Foros > Arriba Foros > Programación de scripts de shell y
.
google unix.com



Programación de scripts de shell y Plantear preguntas sobre KSH, CSH, SH, BASH, PERL, PHP, SED, AWK y otros scripts de shell y lenguajes de script de shell aquí.

Más UNIX y Linux Foro Temas usted puede encontrar útiles
Hilo Hilo para principiantes Foro Respuestas Último mensaje
¿Cómo comenzó con líneas de cadenas coincidentes usando grep sed o de bucle? AMBER Programación de scripts de shell y 8 07-13-2009 06:26 AM
Grep y borrar las líneas, excepto las líneas con las cadenas vj8436 Programación de scripts de shell y 14 04-17-2009 12:25 PM
Grep a 10 líneas después de una cadena en un archivo txt. suman82 Programación de scripts de shell y 6 12-13-2008 01:08 AM
grep cadena y después de unas pocas líneas ashterix Programación de scripts de shell y 7 12-07-2008 09:20 AM
grep cadena y el próximo n líneas ashterix Programación de scripts de shell y 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 vínculo Herramientas de hilo Buscar en este Hilo Tasa de Hilo Modos de visualización
  #1 (Enlace permanente)  
Old 07-10-2009
bhagirathi bhagirathi is offline
Usuario Registrado
  
 

Fecha: julio 2009
Puestos: 10
grep una cadena en las líneas entre el 2 de cadenas de un archivo

Hola,
Por favor, me ayudan con el siguiente problema:
Tengo un archivo XML con las siguientes líneas
Código:
<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>
        
Mi código en el que se compruebe en primer lugar las dos cadenas y <cisco:name> </ cisco: nombre> y después de que se grep el conde de <cisco:cpt>. y así continuar hasta el final del archivo


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

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


}' temp 
rm temp
        
este código no está dando la oportunidad como la
en primera y <cisco:name> </ cisco: nombre> bucle que debe dar para el próximo 2 y luego que 1

PLZ ayuda
  #2 (Enlace permanente)  
Old 07-10-2009
honglus honglus is offline
Usuario Registrado
  
 

Fecha: diciembre 2008
Puestos: 44
Código:
awk '{ if (  $0 ~ /<cisco:cpt>/  )  {i++} if ( $0 ~ /<\/cisco:name>/ ) {print i;i=0}}' test.xml
        
  #3 (Enlace permanente)  
Old 07-10-2009
bhagirathi bhagirathi is offline
Usuario Registrado
  
 

Fecha: julio 2009
Puestos: 10
Hola Honglus,
gracias funciona bien. pero tengo una consulta
Si tengo que buscar dos o 3 modelos como <cisco:cpt>, <cisco:mdNm>, <cisco:sptp> entonces ¿cómo puedo proceder.
  #4 (Enlace permanente)  
Old 07-10-2009
honglus honglus is offline
Usuario Registrado
  
 

Fecha: diciembre 2008
Puestos: 44
Cita:
Publicado originalmente por bhagirathi View Post
Hola Honglus,
gracias funciona bien. pero tengo una consulta
Si tengo que buscar dos o 3 modelos como <cisco:cpt>, <cisco:mdNm>, <cisco:sptp> entonces ¿cómo puedo proceder.
enlace con O, algo como esto:
$ 0 ~ / (Uno | Dos | Tres) /
  #5 (Enlace permanente)  
Old 07-10-2009
summer_cherry summer_cherry is offline Forum Advisor  
Usuario Registrado
  
 

Fecha: junio 2007
Ubicación: Beijing China
Mensajes: 1.089
más formal, perl documento XML puede manejar con muchos módulos disponibles.

Usted puede intentar a continuación para ver el resultado
Código:
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 (Enlace permanente)  
Old 07-10-2009
bhagirathi bhagirathi is offline
Usuario Registrado
  
 

Fecha: julio 2009
Puestos: 10
i lo mismo
Código:
awk '{ if (  $0 ~ /<cisco:cpt> | <cisco:sptp>/  )  {i++} if ( $0 ~ /<\/cisco:name>/ ) {print  "cpt=" i;i=0}}' test.xml
        
Pero el resultado agregado. por lo que podría sugerir la manera en que se puede imprimir que diferente
gustar
CPT \u003d 1
sptp \u003d 2
  #7 (Enlace permanente)  
Old 07-10-2009
ghostdog74 ghostdog74 is offline Forum Advisor  
Usuario Registrado
  
 

Fecha: Sep 2006
Mensajes: 2.554
gawk
Código:
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

Marcadores

Herramientas de hilo Buscar en este Hilo
Buscar en este Hilo:

Búsqueda avanzada
Modos de visualización Vota a este hilo
Vota a este hilo:

Normas de envío
puede que no nuevo puesto de hilos
puede que no enviar respuestas
puede que no enviar archivos adjuntos
puede que no editar sus puestos

Código BB es Encendido
Emoticones son Encendido
[IMG] código Encendido
Código HTML es Apagado
Trackbacks son Encendido
Pingbacks son Encendido
Refbacks son Encendido




Todas las horas son GMT -4. La hora es 07:14 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traducciones de idiomas Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Estudios
El UNIX y Linux Foros Contenido Copyright © 1993-2009. Todos los derechos Reserved.Ad Gestión por RedTyger

Las direcciones URL de contenido vBSEO 3.2.0