The UNIX and Linux Forums  
Olá e boas-vindas de Estados Unidos para o UNIX e Linux Forum! Obrigado por visitar e fazer parte da nossa comunidade global.

Go Back   O UNIX e Linux Forum > Top Fóruns > Programação Shell Script e
.
google unix.com



Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Como chegar a linhas iniciadas com correspondência strings usando sed ou grep para loop? LARANJA Programação Shell Script e 8 07-13-2009 05:26
Grep e apagar linhas exceto as linhas com cordas vj8436 Programação Shell Script e 14 04-17-2009 11:25
Para grep 10 linhas após uma string em um arquivo txt. suman82 Programação Shell Script e 6 12-13-2008 01:08
grep string & algumas linhas depois ashterix Programação Shell Script e 7 12-07-2008 09:20
grep string & próxima n linhas ashterix Programação Shell Script e 8 11-21-2005 11:38

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 Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 07-10-2009
bhagirathi bhagirathi is offline
Usuário
  
 

Join Date: Jul 2009
Lugares: 10
grep uma corda nas linhas entre 2 strings de um arquivo

Oi,
Por favor, ajudem-me com o seguinte problema:
Eu tenho um arquivo xml com as seguintes linhas
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>
No meu código ele irá primeiro verificar a duas cordas <cisco:name> e </ cisco: nome> e depois que a contagem de <cisco:cpt> grep. e continuará assim por diante até o final do ficheiro


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 não está dando o que a op
em primeiro <cisco:name> e </ cisco: nome> loop deve dar 2 então para o próximo seria 1

plz help
  #2 (permalink)  
Old 07-10-2009
honglus honglus is offline
Usuário
  
 

Join Data: dezembro 2008
Lugares: 43
Código:
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
Usuário
  
 

Join Date: Jul 2009
Lugares: 10
Oi Honglus,
graças ele funciona bem. mas tenho uma dúvida
Se eu tiver que procura dois ou 3 padrões como <cisco:cpt>, <cisco:mdNm>, <cisco:sptp> então, como posso continuar.
  #4 (permalink)  
Old 07-10-2009
honglus honglus is offline
Usuário
  
 

Join Data: dezembro 2008
Lugares: 43
Citação:
Originally Posted by bhagirathi View Post
Oi Honglus,
graças ele funciona bem. mas tenho uma dúvida
Se eu tiver que procura dois ou 3 padrões como <cisco:cpt>, <cisco:mdNm>, <cisco:sptp> então, como posso continuar.
articulá-los com OR, algo parecido com isto:
$ 0 ~ / (um | dois | três) /
  #5 (permalink)  
Old 07-10-2009
summer_cherry summer_cherry is offline Forum Advisor  
Usuário
  
 

Join Date: Jun 2007
Localização: Beijing China
Mensagens: 1.079
mais formalmente, perl pode lidar com muitos documento XML disponíveis módulo.

Você pode tentar para ver o 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 (permalink)  
Old 07-10-2009
bhagirathi bhagirathi is offline
Usuário
  
 

Join Date: Jul 2009
Lugares: 10
Eu fiz o mesmo
Código:
awk '{ if (  $0 ~ /<cisco:cpt> | <cisco:sptp>/  )  {i++} if ( $0 ~ /<\/cisco:name>/ ) {print  "cpt=" i;i=0}}' test.xml
Mas o resultado acrescentou. assim você pode sugerir como ela pode imprimir de maneira diferente que
como
cpt \u003d 1
sptp \u003d 2
  #7 (permalink)  
Old 07-10-2009
ghostdog74 ghostdog74 is offline Forum Advisor  
Usuário
  
 

Join Date: Sep 2006
Posts: 2.513
basbaque
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

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 04:59.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0