![]() |
|
|
google unix.com
|
|||||||
| Foros | Registro | Reglas de los Foros | Enlaces | Álbumes | Preguntas más frecuentes | Lista de miembros | Calendario | Búsqueda | Puestos de hoy | Marcar Foros Como Leídos |
| 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 |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo | Tasa de Hilo | Modos de visualización |
|
|
|
||||
|
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>
Código:
#!/bin/sh
sed '/<\/cisco:name>/{G;}' test.xml >temp
nawk 'BEGIN{RS=""}
{
grep -c '<cisco:cpt>' print
}' temp
rm temp
en primera y <cisco:name> </ cisco: nombre> bucle que debe dar para el próximo 2 y luego que 1 PLZ ayuda |
|
||||
|
Código:
awk '{ if ( $0 ~ /<cisco:cpt>/ ) {i++} if ( $0 ~ /<\/cisco:name>/ ) {print i;i=0}}' test.xml
|
|
||||
|
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. |
|
||||
|
Cita:
$ 0 ~ / (Uno | Dos | Tres) / |
|
||||
|
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";
}
|
|
||||
|
i lo mismo
Código:
awk '{ if ( $0 ~ /<cisco:cpt> | <cisco:sptp>/ ) {i++} if ( $0 ~ /<\/cisco:name>/ ) {print "cpt=" i;i=0}}' test.xml
gustar CPT \u003d 1 sptp \u003d 2 |
|
||||
|
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
|
![]() |
| Marcadores |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|